ошибка sql server sp_executesql со строкой sql

#sql #sql-server-2008 #sp-executesql

#sql #sql-server-2008 #sp-executesql

Вопрос:

У меня есть строка, которая выглядит следующим образом:

установите @sqlstring = N'select @mindate = min(время), @maxdate = max(время) из '   @st_churn_active_table;

Я печатаю ее, и она выглядит так:

выберите @mindate = min(время), @maxdate = max(время) из derp.derp_table

Я запускаю sp_executesql с определениями параметров, подобными этому:

выполнить sp_executesql @sqlstring, N'@maxdate дата,@mindate дата'

Это ошибка, подобная этой:

Параметризованный запрос '(@maxdate дата,@mindate дата)выберите @mindate = min(время), @maxda' ожидает параметр '@maxdate', который не был указан.

Строка становится
‘(@maxdate дата,@mindate дата)выберите @mindate = min(время), @maxda’

Строка sql обрезана, кто-нибудь знает, почему и как это исправить?

Спасибо!

Ответ №1:

Ответ №2:

Прежде всего, sql server увидел всю строку целиком. Это только сообщение об ошибке, которое усекает его. Обратите внимание, что в ошибке правильно указано имя отсутствующего параметра, хотя в усеченной строке sql была только часть имени.

Во-вторых, это не будет работать так, как вы хотите. Вы не можете использовать выходные параметры таким образом с sp_executesql.

Но, наконец, к проблеме, почему он выдает ошибку. Я не могу быть уверен, но я подозреваю, что проблема здесь в том, что существует несоответствие типов, и поэтому он не может использовать указанный вами параметр. Я бы надеялся, что sql server выдаст лучшее сообщение об ошибке (пожаловаться на несоответствие типов) в этой ситуации, но у меня нет sql server, удобного для тестирования, и я не могу придумать никакой другой причины, по которой это может вызвать проблему.