У меня очень простой динамический 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.»