【发布时间】:2015-12-22 23:20:45
【问题描述】:
我已经想出如何使用通用表表达式递归查找所有向某个经理汇报的员工(感谢 StackOverflow!)。
这是适合我的代码:
WITH MyCTE AS
(
SELECT [WWID] FROM [x500]..[WorkerPublicExtended]
WHERE [MgrWWID] = '10624529' AND ([StatCode] = 'A') AND ([BadgeType] = 'BB')
UNION ALL
SELECT [WorkerPublicExtended].[WWID] FROM [x500]..[WorkerPublicExtended]
INNER JOIN MyCTE ON [WorkerPublicExtended].[MgrWWID] = MyCTE.WWID
WHERE [WorkerPublicExtended].[MgrWWID] IS NOT NULL
AND ([BadgeType] = 'BB') AND ([StatCode] = 'A')
)
SELECT *, 'MGR+10624529' AS [source] FROM MyCTE
这非常有效。但是,如果我尝试将其插入到另一个表中(这是最终目标),我找不到任何不会引发一个或多个错误的代码的语法变体。有人可以帮我把这些放在一起吗?
INSERT INTO [LTDtraining].[dbo].[pop00001]
WITH MyCTE AS
(
SELECT [WWID] FROM [x500]..[WorkerPublicExtended]
WHERE [MgrWWID] = '10624529' AND ([StatCode] = 'A') AND ([BadgeType] = 'BB')
UNION ALL
SELECT [WorkerPublicExtended].[WWID] FROM [x500]..[WorkerPublicExtended]
INNER JOIN MyCTE ON [WorkerPublicExtended].[MgrWWID] = MyCTE.WWID
WHERE [WorkerPublicExtended].[MgrWWID] IS NOT NULL
AND ([BadgeType] = 'BB') AND ([StatCode] = 'A')
)
SELECT *, 'MGR+10624529' AS [source] FROM MyCTE
它会抛出如下错误:
消息 102,第 15 级,状态 1,第 2 行
'MyCTE' 附近的语法不正确。
或者永远流行的
消息 156,第 15 级,状态 1,第 2 行
关键字“WITH”附近的语法不正确。消息 319,第 15 级,状态 1,第 2 行
关键字“with”附近的语法不正确。如果这个语句是一个公用表表达式、一个 xmlnamespaces 子句或一个更改跟踪上下文子句,则前面的语句必须以分号结束。消息 102,第 15 级,状态 1,第 9 行
')' 附近的语法不正确。
如果我插入建议的分号,它会响应
消息 102,第 15 级,状态 1,第 1 行
';' 附近的语法不正确。
所以这让我觉得我不知道我在这里做什么,SQL 也不知道。
【问题讨论】:
-
尝试将插入语句放在 CTE 之后(例如 'WITH CTE AS (...) INSERT...'
标签: sql sql-server insert sql-server-2012 common-table-expression