我試圖使動態SQL它可以獲取所有任務對一些用戶 我寫這些CURENT用戶的所有subalterns的SQL Server不允許執行子查詢的動態SQL
的程序[GetAllSubExecutorsByUserId]返回標識ID添加到一個臨時表,之後,我想使動態SQL擺脫[任務]表中的所有任務,其中「執行人」列在這個臨時表中的值
我寫的查詢如下:
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);
卜t當我運行它,它給出了一個錯誤:
子查詢返回多個值。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。
,我可以不知道如何解決它,因爲如果我運行相同的查詢(這不是它的工作原理完全動態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 ... 請幫我解決這個問題。
謝謝。
據我所知,我應該得到「從@tmp選擇ID」子查詢作爲CSV字符串的結果......但sp_executesql怎麼辦?> – meorfi 2012-03-15 14:12:03
我不知道你在哪裏得到了理解,但那不是真的子查詢將轉換爲CSV。我將更新我的答案,以顯示如何使用sp_executesql如描述 – 2012-03-15 14:19:15
謝謝Justin! – meorfi 2012-03-15 14:34:03