【发布时间】:2010-11-05 19:09:52
【问题描述】:
我正在使用带有 SQL Server 2000 后端的时间表系统,我需要列出带有导师和房间的事件,这可能超过 1 个,因此可以将多行房间和导师变成 + 分隔列表。我过去使用过以下代码:
DECLARE @Tutors as varchar(8000)
SELECT @Tutors = isnull(@Tutors + ' + ', '') + name
FROM (
SELECT CT_EVENT_STAFF.event_id, CT_EVENT_STAFF.weeks,
CT_STAFF.unique_name, CT_STAFF.name
FROM celcat200809.dbo.CT_EVENT_STAFF AS CT_EVENT_STAFF
LEFT OUTER JOIN celcat200809.dbo.CT_STAFF AS CT_STAFF
ON CT_EVENT_STAFF.staff_id = CT_STAFF.staff_id
WHERE event_id = @eventID
) As data_set
print @Tutors
event_id 是唯一的事件,这只有在我知道确切的 ID 时才有效,我不能为每个 ID 运行它。
有没有办法在没有游标的情况下为每个单独的 event_id 执行此操作。不幸的是,我在使用 UDF 时看到了一个可能的解决方案,我的第二个问题是时间表系统(CELCAT)每年都会创建一个新数据库(我知道不要问),所以我将不得不使 SQL 动态化,即明年的数据库将是celcat200910,我相信动态SQL不能在UDF中运行。
请记住这是 SQL Server 2000
【问题讨论】:
-
关于数据库安排:听起来很粗糙。是的,UDF 中不允许使用动态 SQL。您可能会在此线程中找到一些有用的帮助,用于多数据库工作:stackoverflow.com/questions/1037174/… ... 但是,我认为最好的解决方案是尝试找到某种方法将数据放在单个数据库中的某个地方 - 但这可能高于和超出你的职权范围/职责范围。
-
我将大部分数据放入单独的数据库中,用于出勤数据和类似数据。我使用一夜之间的过程来填充这些东西,但是这个特定的查询需要是实时的
标签: sql sql-server sql-server-2000