我想(和失败)创建一个子查询动态查询。 我有一个问题表,其中每个问题的可能答案都需要从一个或多个其他表中动态创建。我在问题表中有一个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