动态 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
我有一个非常简单的动态 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