SET @DynamicSQL = 'UPDATE U SET U.ADDRESS1 = U.ADDRESS2, U.ADDRESS2 = NULL FROM USER U INNER JOIN EMPOYEE E ON E.USER_ID = U.USER_ID WHERE U.TYPE = ''' + @TYPE + ''''
EXEC(@DynamicSQL)
PRINT @DynamicSQL
我在存储过程中创建了动态sql,如上所示,现在当它在SP中执行时,它打印出我想要的正确sql,但是在EXEC上更新的行是'0'。但是,当我尝试执行通过在SP中打印sql生成的sql时,它显示我更新了150行。
现在可能是EXEC无法更新行,直接调用PRINTED sql的原因是什么?
答案 0 :(得分:0)
如果执行以下语句,输出是否显示任何更新的行?
SET @DynamicSQL =
'UPDATE U ' + CHAR(13) + CHAR(10)
+ 'SET U.ADDRESS1 = U.ADDRESS2 ' + CHAR(13) + CHAR(10)
+ ' , U.ADDRESS2 = NULL ' + CHAR(13) + CHAR(10)
+ 'OUTPUT Inserted.* ' + CHAR(13) + CHAR(10)
+ 'FROM USER U ' + CHAR(13) + CHAR(10)
+ ' INNER JOIN EMPOYEE E ON E.USER_ID = U.USER_ID ' + CHAR(13) + CHAR(10)
+ 'WHERE U.TYPE = ' + @TYPE + ''''
EXEC(@DynamicSQL)
PRINT @DynamicSQL
答案 1 :(得分:0)
要查看实际的行数,可以在@DynamicSQL末尾添加SELECT @@ ROWCOUNT。 您也可以启动一个分析器并查看实际执行的内容。桌子上有任何触发器吗?