我真的需要第二双眼睛......我有一个带变量的存储过程:
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 :(得分: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