Sql server EXEC内部已更新的查询是否未更新数据?

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

如上图所示,我正在存储过程中创建动态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 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