Динамическая ошибка Sp_Executesql при ошибке преобразования даты и времени - PullRequest
0 голосов
/ 12 июня 2019

У меня очень простой динамический SQL-запрос, который необходимо вызывать с помощью sp_executesql с параметрами.Этот запрос прекрасно работает в обычном динамическом SQL, но завершается неудачно при использовании sp_executesql при ошибке преобразования.

Я пробовал много комбинаций динамического SQL, но ни одна из них, похоже, не работает специально для преобразований даты и времени, связанных с sp_executesql.

declare 
@sql_nvarchar nvarchar(max),
@datetime datetime = GETDATE(),
@sqlparams nvarchar(max),
@tablename nvarchar(max) = 'SomeTableName'

Set @sql_nvarchar =
N'
Select *
from ' + @tablename + '
where Date > ''' + convert(nvarchar(23), @datetime, 101) + ''' '

Set @sqlparams =
N'
@datetime datetime,
@tablename nvarchar(max)
'

EXEC(@sql_nvarchar)

EXEC [sp_executesql] @sql_nvarchar,@sqlparams, @datetime, @tablename

Первый exec корректно возвращает нужный запрос, второй EXEC выдает ошибку: «Ошибка преобразования типа данных nvarchar (max) в datetime.»

1 Ответ

0 голосов
/ 12 июня 2019

Нельзя параметризовать идентификатор, например имя таблицы.Итак, сформулируйте это как:

Set @sql_nvarchar = N'
Select *
from ' + @tablename + '
where Date > @datetime
';

Set @sqlparams = N'@datetime datetime'
exec sp_executesql @sql_nvarchar, @sqlparams,
                   @datetime=@datetime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...