【发布时间】:2014-11-25 01:06:52
【问题描述】:
我正在处理一个动态查询,但我有点不确定如何完成这项任务。这似乎很常见,所以我会将其用作学习经验。
我的结构有几张桌子。我在这个示例中包含了其中的一些,因为一旦我可以获取基本查询,我就可以添加它。
在我的最终查询中,WHERE 子句将动态生成。
这是我的结构:http://sqlfiddle.com/#!6/2b104
在内部选择c. 中,您会注意到我有一个名为localeID 的列。我需要能够在我的外部WHERE 子句中查询这个。
例如,该 localeID 将链接到 localeCodes 表,从那里,我有另一个名为 locations 的表。最终结果将是“向我展示北美的一切”。好吧,我们知道localeID 8 = 犹他州,犹他州位于北美(加入位置表时)。
这是与 OP 一起保存的查询:
SELECT a.[trainingEventID],
a.[teTitle],
a.[teSource],
a.[teType],
a.[teMedium],
a.[teFlag],
a.[teCreator],
a.[teCreated],
a.[tePOC],
a.[teDirector],
a.[teTeammateImpact],
a.[teCustomerImpact],
a.[teComplexity],
a.[intID],
a.[teNeededBy],
a.[approver],
a.[approvalDate],
(SELECT b.[trainingEventID],
b.[segmentDate],
b.[nonProdHrs],
(SELECT c.[segmentID],
c.[localeID],
c.[teammateCount],
c.[leaderCount]
FROM BS_TrainingEvent_SegmentDetails AS c
WHERE c.[segmentID] = b.teSegmentID
FOR XML PATH ('detail'), TYPE, ELEMENTS, ROOT ('details'))
FROM BS_TrainingEvent_Segments AS b
WHERE b.trainingEventID = a.[trainingEventID]
FOR XML PATH ('segment'), TYPE, ELEMENTS, ROOT ('segments'))
FROM BS_TrainingEvents AS a
--WHERE c.[localeID] = '8'
FOR XML PATH ('event'), TYPE, ELEMENTS, ROOT ('events');
【问题讨论】:
标签: sql-server tsql stored-procedures sql-server-2012