带有更新和选择的动态SQL

时间:2015-08-18 05:09:44

标签: sql-server

我知道我可能错过了一个基本的标点符号问题,但我无法弄明白......

我将表和日期字段传递给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.有什么想法吗?如果有帮助,我可以添加其他信息。

谢谢!

2 个答案:

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