SQL 服务器 - 我能否根据对另一个 table 的 SELECT 查询的结果动态创建多个参数?

SQL Server - Can I dynamically create multiple parameters from the results of a SELECT query on another table?

所以我有我的 'Chaplains' table:

CREATE TABLE Chaplaincy_Chaplains
(
ChaplainID INTEGER IDENTITY PRIMARY KEY,
ChaplainName VARCHAR(50),
FaithID INTEGER,
Telephone VARCHAR(50),
Email VARCHAR(255),
Notes VARCHAR(255),
FOREIGN KEY (FaithID) REFERENCES Chaplaincy_Faiths(FaithID)
);  

我在其中插入了四条记录:

INSERT INTO Chaplaincy_Chaplains
VALUES ('Robin Richardson',1,'555-123456','Robin.Richardson@chaplaincy.com',NULL)

INSERT INTO Chaplaincy_Chaplains
VALUES ('Peter Jackson',8,'555-123-456','Peter.Jackson@chaplaincy.com',NULL)

INSERT INTO Chaplaincy_Chaplains
VALUES ('Harry Davidson',1,'555-123-456','Harry.Davidson@chaplaincy.com',NULL)

INSERT INTO Chaplaincy_Chaplains
VALUES ('Steve Morrison',7,'555-123-456','Steve.Morrison@chaplaincy.com',NULL)

目前我已将这些记录硬编码到我的 'Rota' 查询中:

SELECT RotaDate,  DateDay, SlotTypeID, SlotDescription AS Hours,
    max(case when ChaplainName = 'Robin Richardson' then AvailabilityDescription end) Robin ,
    max(case when ChaplainName = 'Peter Jackson' then AvailabilityDescription end) Peter ,
    max(case when ChaplainName = 'Harry Davidson' then AvailabilityDescription end) Harry ,
    max(case when ChaplainName = 'Steve Morrison' then AvailabilityDescription end) Steve 
    FROM Chaplaincy_Rota,Chaplaincy_Availability, Chaplaincy_Chaplains, Chaplaincy_Dates, Chaplaincy_Faiths, Chaplaincy_SlotTypes
    WHERE
    RotaDate = Chaplaincy_Dates.Date AND
    RotaSlot = SlotTypeID AND
    RotaChaplain = ChaplainID AND
    RotaAvailability = AvailabilityID AND
    ChaplainFaith = Chaplaincy_Faiths.FaithID
    GROUP BY RotaDate, SlotTypeID, SlotDescription, DateDay
    ORDER BY RotaDate, SlotTypeID;

这给了我这样的东西:

                                  | Robin  | Peter | Harry   | Steve   |

01/06/2015 | Mon | 00:00 to 08:00 | Leave  | Study | On-call | Avail   |

01/06/2015 | Mon | 08:00 to 13:00 | Leave  | Study | On-call | Avail   |

01/06/2015 | Mon | 13:00 to 18:00 | Leave  | Study | On-call | Avail   |

01/06/2015 | Mon | 18:00 to 00:00 | Leave  | Study | On-call | Avail   |

02/06/2015 | Tue | 00:00 to 08:00 | On-call| Avail | Study   | Avail   |

02/06/2015 | Tue | 08:00 to 13:00 | On-call| Avail | Study   | Avail   |

02/06/2015 | Tue | 13:00 to 18:00 | On-call| Avail | Avail   | Avail   |

02/06/2015 | Tue | 18:00 to 00:00 | On-call| Avail | Avail   | Avail   |
....
et cetera

有什么方法可以动态更新我的 'Rota' 查询,这样每次我向 'Chaplains' table 添加新记录时,该记录都会自动包含在'Rota' 查询?实际上,我希望能够向 'Rota' 查询添加一列,只需向牧师 table.

添加一行

非常感谢阅读!

你能检查一下吗

Declare @sql varchar(max) = ''
set @sql = 'SELECT RotaDate,  DateDay, SlotTypeID, SlotDescription AS Hours,'

select @sql = @sql + ' 
' + 'max(case when ChaplainName = '''+ChaplainName+''' then AvailabilityDescription end) '+LEFT(ChaplainName, CHARINDEX(' ', ChaplainName+ ' ') - 1)+' ,'
FROM Chaplaincy_Chaplains

SET @sql = LEFT(@sql, LEN(@sql) - 1)

SET @sql = @sql + ' ' +
    '
    FROM Chaplaincy_Rota,Chaplaincy_Availability, Chaplaincy_Chaplains, Chaplaincy_Dates, Chaplaincy_Faiths, Chaplaincy_SlotTypes
    WHERE
    RotaDate = Chaplaincy_Dates.Date AND
    RotaSlot = SlotTypeID AND
    RotaChaplain = ChaplainID AND
    RotaAvailability = AvailabilityID AND
    ChaplainFaith = Chaplaincy_Faiths.FaithID
    GROUP BY RotaDate, SlotTypeID, SlotDescription, DateDay
    ORDER BY RotaDate, SlotTypeID;'

Print @sql
EXEC (@sql)

输出:

    SELECT RotaDate,  DateDay, SlotTypeID, SlotDescription AS Hours, 
max(case when ChaplainName = 'Robin Richardson' then AvailabilityDescription end) Robin , 
max(case when ChaplainName = 'Peter Jackson' then AvailabilityDescription end) Peter , 
max(case when ChaplainName = 'Harry Davidson' then AvailabilityDescription end) Harry , 
max(case when ChaplainName = 'Steve Morrison' then AvailabilityDescription end) Steve  
    FROM Chaplaincy_Rota,Chaplaincy_Availability, Chaplaincy_Chaplains, Chaplaincy_Dates, Chaplaincy_Faiths, Chaplaincy_SlotTypes
    WHERE
    RotaDate = Chaplaincy_Dates.Date AND
    RotaSlot = SlotTypeID AND
    RotaChaplain = ChaplainID AND
    RotaAvailability = AvailabilityID AND
    ChaplainFaith = Chaplaincy_Faiths.FaithID
    GROUP BY RotaDate, SlotTypeID, SlotDescription, DateDay
    ORDER BY RotaDate, SlotTypeID;