#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, удобного для тестирования, и я не могу придумать никакой другой причины, по которой это может вызвать проблему.