【发布时间】:2012-04-01 00:32:30
【问题描述】:
我尝试创建一个动态 SQL 来获取某些用户的所有任务
过程 [GetAllSubExecutorsByUserId] 返回当前用户的所有子节点的 ID 我将这些 ID 写入一个临时表,然后我想创建一个动态 SQL 来从 [tasks] 表中获取所有任务,其中“Executor”列的值在这个临时表中
我写的查询如下:
DECLARE @UserId VARCHAR(10) = 72;
DECLARE @tmp TABLE ( Id VARCHAR(10));
INSERT @tmp exec [dbo].[GetAllSubExecutorsByUserId] @Source = @UserId;
DECLARE @SQL VARCHAR(max);
SELECT @SQL = 'SELECT * FROM tasks ';
SELECT @SQL = @SQL + 'WHERE Executor IN (' + (select Id from @tmp) + ')';
EXEC(@SQL);
但是当我运行它时,它给出了一个错误:
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
而且我不明白如何修复它,因为如果我运行相同的查询(这不是动态 SQL,它可以完美运行)
有效的查询是静态的:
DECLARE @UserId VARCHAR(10) = 72;
DECLARE @tmp TABLE ( Id VARCHAR(10));
INSERT @tmp exec [dbo].[GetAllSubExecutorsByUserId] @Source = @UserId;
SELECT * FROM tasks WHERE Executor IN (select Id from @tmp)
但我需要一个动态的 SQL... 请帮我解决这个问题。
谢谢。
【问题讨论】:
标签: sql dynamic subquery temp-tables