EXEC内的更新查询没有更新数据?

时间:2010-08-26 08:07:16

标签: sql-server

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的原因是什么?

2 个答案:

答案 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。 您也可以启动一个分析器并查看实际执行的内容。桌子上有任何触发器吗?