0

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

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

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

4

5 回答 5

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 = '') 进行比较,以及您期望它会做什么。

于 2012-11-07T17:06:44.453 回答
2

看起来你有一个关于 DATEDIFF(dd, '1/1/1753', CONVERT(datetime,getdate())) + 639906 的报价

删除引号,它应该可以工作。

于 2012-11-07T17:06:57.533 回答
1

试试这个:

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

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

于 2012-11-07T17:09:29.227 回答
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
于 2012-11-08T07:35:58.430 回答
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
于 2012-11-07T17:11:27.973 回答