2012-11-07 50 views
0

我真的需要这样的第二双眼睛......我有一个存储过程具有可变:SQL转换错误

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时转换失败。

我很确定我错过了或在某处添加了不正确数量的引号。谢谢。

+0

谢谢大家......你们都有同样的答案。我确实用引号括住了整个变量......并不需要这样做。你们都很棒。 – PuroRock

回答

2

看起来你身边 DATEDIFF报价(DD '1753年1月1日',CONVERT(日期时间,GETDATE()))+ 639906

删除引号,它应该工作。

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

试试这个:

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

有大约DATEDIFF不正确引号()和周围的假日期

0

双引号去掉多余的报价奏效了 - 我已经使用简化您的IF检查ISNULL

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 
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