Я пытаюсь (и не удается) создать динамический запрос с подзапросом. У меня есть таблица вопросов, где возможные ответы на каждый вопрос нужно динамически создавать из одной или нескольких других таблиц. У меня есть поле 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 - Эрланд Соммарског] (http://www.sommarskog.se/dynamic_sql.html) – SqlZim
Как общий принцип, если вы НЕОБХОДИМО использовать динамический SQL, не делайте этого, как будто вы делаете это здесь, или как McNets предложил в своем ответе (используя 'EXEC()', хотя McNets предложил неправильный ответ по другим причинам). Вместо этого используйте 'EXEC sp_executesql'. Это позволяет правильно параметризовать ваши запросы. Вот статья, описывающая, почему это [дурная привычка] (http: // sqlblog.ком/блоги/aaron_bertrand/Архив/2011/09/17/плохие-привычки к ножным с использованием-Exec-вместо-оф-уд-executesql.aspx). – ZLK