我知道我可能错过了一个基本的标点符号问题,但我无法弄明白......
我将表和日期字段传递给UPDATE SET x =(SELECT ...)语句,但它无法正常工作。确切的代码是:
SET @sqlCommand= 'UPDATE FDT_Needed
SET Need=(SELECT 0
FROM '+@table +'
INNER JOIN FD__MASTERDUEDATES b on b.OP__DOCID='+@table+'.OP__DOCID
WHERE '''+@DateField+''' IS NULL
AND b.DATEDUE IS NOT NULL)'
EXEC (@sqlCommand)
当我“选择需要从FDT_Needed”我得到Null,但是,如果我用相同的测试数据(不使用动态SQL)编写上面相同的sql代码,我得到0.有什么想法吗?如果有帮助,我可以添加其他信息。
谢谢!
答案 0 :(得分:0)
SET @sqlCommand= 'UPDATE FDT_Needed
SET Need=(SELECT TOP(1) 0
FROM '+@table +'
INNER JOIN FD__MASTERDUEDATES b on b.OP__DOCID='+@table+'.OP__DOCID
WHERE '+@DateField+' IS NULL
AND b.DATEDUE IS NOT NULL)'
EXEC (@sqlCommand)
答案 1 :(得分:0)
这似乎不对:
WHERE '''+@DateField+''' IS NULL
这将导致:
WHERE 'someStringGoesHere' IS NULL
将字符串文字与NULL
进行比较,它始终为false。我猜测@DateField
是一个列名,而你打算:
WHERE ' + QUOTENAME(@DateField) + ' IS NULL
旁注:除非您完全确定它是安全的,否则请考虑在QUOTENAME
上调用@table
。