Возможный дубликат:
SQL: в предложение в хранимой процедуре: как передавать значения
Я использую MS SQL Server 2005 и пытаюсь написать двухэтапный сценарий:
- Запросить в таблице список идентификаторов, соответствующих определенным критериям
- Обновите поле в этой таблице, где идентификатор находится в списке идентификаторов, возвращаемых первым
Проблема в том, что шаги 1 и 2 могут быть разделены значительной временной задержкой и выполняться в разных сеансах. Существенно, что список идентификаторов, используемых в №2, представляет собой исторические данные: значения, которые №1 вернул в прошлый момент времени.
Я попытался записать все идентификаторы из # 1 в varchar (8000) в формате "##, ##, ##, ##," (эта часть отлично работает), а затем использовать эту строку как:
UPDATE table SET field=newValue WHERE (id IN (@varcharOfCommaSeparatedIDs))
Но это дает мне синтаксическую ошибку, заявляя, что он не может преобразовать это значение varchar во все, что необходимо (сообщение об ошибке усекается)
Есть ли способ сделать это, не помещая всю команду SQL в строку и не выполняя ее (используя EXEC или sp_executesql)? После многих лет избегания инъекционных атак у меня возникло инстинктивное (и, возможно, иррациональное) отвращение к «динамическому SQL».