SQL转换错误

时间:2012-11-07 17:03:03

标签: sql sql-server-2008

我真的需要第二双眼睛......我有一个带变量的存储过程:

DECLARE @date_period_end int 

IF @date_period_end = '' or @date_period_end is null  
BEGIN 
    SET @date_period_end = 'DATEDIFF(dd, ''1/1/1753'', CONVERT(datetime,getdate())) + 639906 ' 
END

以下是执行时返回的错误SQL:

  

将varchar值'DATEDIFF(dd,'1/1/1753',CONVERT(datetime,getdate()))+ 639906'转换为数据类型int时,转换失败。

我很确定我错过了或者在某处添加了错误的报价。感谢。

5 个答案:

答案 0 :(得分:2)

你的DATEDIFF函数附近有引号,使它成为字符串文字,我很确定这不是你想要的。试试这个:

DECLARE @date_period_end int 

IF @date_period_end = '' or @date_period_end is null  
BEGIN 
    SET @date_period_end = DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906
END

旁注:我不确定你为什么要将一个整数与空字符串(@date_period_end = '')进行比较,以及你期望它做什么。

答案 1 :(得分:2)

看起来你有一个引用 DATEDIFF(dd,'1/1/1753',CONVERT(datetime,getdate()))+ 639906

删除引号,它应该有用。

答案 2 :(得分:1)

试试这个:

BEGIN
   SET @date_period_end = DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906  
END

DATEDIFF()周围有不正确的引号,虚拟日期周围有双引号

答案 3 :(得分:1)

DECLARE @date_period_end int

IF @date_period_end = '' or @date_period_end is null  
BEGIN 
SET @date_period_end = DATEDIFF(dd,'1/1/1753',CONVERT(datetime,getdate())) + 639906
END

您还可以使用以下语句以及上面的代码来查看此变量的值:

Print @date_period_end

答案 4 :(得分:0)

删除多余的引号就行了 - 我使用ISNULL简化了你的IF检查

DECLARE @date_period_end int 

IF ISNULL(@date_period_end,'') = '' 
BEGIN 
    SET @date_period_end = DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906 
END