动态 Sp_Executesql 因日期时间转换错误而失败

Dynamic Sp_Executesql failing on datetime conversion error

我有一个非常简单的动态 SQL 查询,特别需要使用带参数的 sp_executesql 来调用它。此查询在常规动态 SQL 中工作正常,但在转换错误时使用 sp_executesql 时失败。

我尝试了多种动态 SQL 组合,但其中 none 似乎专门用于与 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

第一个执行正确returns想要的查询,第二个执行抛出错误:'Error converting data type nvarchar(max) to datetime.'

您不能参数化标识符,例如 table 名称。因此,将其表述为:

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

Set @sqlparams = N'@datetime datetime'
exec sp_executesql @sql_nvarchar, @sqlparams,
                   @datetime=@datetime