我想(和失敗)創建一個子查詢動態查詢。 我有一個問題表,其中每個問題的可能答案都需要從一個或多個其他表中動態創建。我在問題表中有一個varchar字段,我想動態地使用它來查詢可能的答案。例如:動態查詢動態子查詢
問題表:
-----------------------------------------------------------------------------
id | question | answer_query
-----------------------------------------------------------------------------
1 | Can this be done? | SELECT field1 + ' ' + field2 answers FROM table1 a JOIN table2 b ON b.field1 = a.field2 WHERE b.id = '@id'
然後,我希望有一個存儲過程創建這樣一個動態查詢:
DECLARE @id int
SET @id.......
DECLARE @sql_query varchar(3000);
SET @sql_query =
'SELECT q.id, q.question, (REPLACE(q.answer_query, ''@id'', @id))
FROM Questions q
JOIN Other Table ON ....
WHERE .....';
EXECUTE(@sql_query);
道歉窮人格式!
正在嘗試做什麼?
我的第一反應是:不這樣做。如果你打算做這樣的事情,從這裏開始:[動態SQL的詛咒和祝福 - Erland Sommarskog](http://www.sommarskog.se/dynamic_sql.html) – SqlZim
作爲一般原則,如果你需要使用動態SQL,不要這樣做,就像你在這裏做的那樣,或者像McNets在他的回答中所建議的那樣(使用'EXEC()',即使McNets爲其他原因建議了一個不正確的答案)。改爲使用'EXEC sp_executesql'。它允許正確地參數化您的查詢。這篇文章描述了爲什麼它是[壞習慣](http:// sqlblog。COM /博客/ aaron_bertrand /存檔/ 2011/09/17 /壞習慣,對開球使用-EXEC-INSTEAD-OF-SP-executesql.aspx)。 – ZLK