Sql server EXEC内部已更新的查询是否未更新数据?
如上图所示,我正在存储过程中创建动态sql,现在当它在SP中执行时,它会打印出我想要的正确sql,但在EXEC上更新的行上是“0”。但是,当我尝试执行通过在SP中打印sql生成的sql时,它显示更新了150行Sql server EXEC内部已更新的查询是否未更新数据?,sql-server,Sql Server,如上图所示,我正在存储过程中创建动态sql,现在当它在SP中执行时,它会打印出我想要的正确sql,但在EXEC上更新的行上是“0”。但是,当我尝试执行通过在SP中打印sql生成的sql时,它显示更新了150行 现在是什么原因导致EXEC不能更新行,而直接调用PRINTED sql会更新行?如果执行以下语句,输出是否显示任何更新的行 SET @DynamicSQL = 'UPDATE U SET U.ADDRESS1 = U.ADDRESS2, U.ADDRESS2 = NULL FROM U
现在是什么原因导致EXEC不能更新行,而直接调用PRINTED sql会更新行?如果执行以下语句,输出是否显示任何更新的行
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
要查看实际的行数,可以在@DynamicSQL末尾添加SELECT@@ROWCOUNT。
您还可以启动探查器,查看实际执行的是什么。表中有触发器吗?我在更新查询中使用了来自用户U的触发器,但输出由PRINT@DynamicSql如果我直接复制并执行,它会执行并更新行。我假设当执行生成的SQL时,它会输出行?你看过查询计划了吗?如果你能区分两个计划,这可能会给你一个线索。
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