以下动态SQL会引发错误:
将字符串转换为smalldatetime数据类型
时转换失败
我的代码:
DECLARE @pTimeStamp smalldatetime
SET @pTimeStamp = '2017-05-22 12:15:00'
DECLARE @SQLQuery AS NVARCHAR(4000)
Set @SQLQuery = N'Select *' +
' From SampleTable' +
' Where TimeStamp = ' + @pTimeStamp
EXECUTE sp_executesql @SQLQuery
我也试过
Convert(smalldatetime, @pTimeStamp, 20)
以及
CAST(@pTimeStamp AS smalldatetime)
但我只有其他错误。我还尝试将@pTimeStamp
声明为varchar(50)
,然后转换但仍然出错。
做一些简单的事情:
DECLARE @pTimeStamp smalldatetime
SET @pTimeStamp = '2012-01-22 12:15:00'
Select *
From SampleTable
Where TimeStamp = @pTimeStamp
运行正常,所以我猜它与动态SQL有关。
请帮忙......
答案 0 :(得分:2)
SQL Server中日期/时间文字的唯一真正安全格式,至少对于datetime
和smalldatetime
,是:YYYYMMDD
和YYYY-MM-DDThh:mm:ss[.nnn]
- {{3} }
您已使用sp_executesql
,为什么不利用其参数?
declare @pTimeStamp smalldatetime;
declare @params nvarchar(4000);
declare @sqlquery nvarchar(4000);
set @pTimeStamp = '2017-05-22T12:15:00';
set @params = N'@pTimeStamp smalldatetime';
set @sqlquery = N'
select *
from SampleTable
where TimeStamp = @pTimeStamp';
execute sp_executesql @sqlquery, @params, @pTimeStamp;
rextester演示:Bad habits to kick : mis-handling date / range queries - Aaron Bertrand
动态sql参考:
答案 1 :(得分:0)
您需要将时间戳嵌入单引号中。尝试:
Set @SQLQuery = N'Select *' +
' From SampleTable' +
' Where TimeStamp = ''' + @pTimeStamp + ''''