代码之家  ›  专栏  ›  技术社区  ›  Anil Namde

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

  •  0
  • Anil Namde  · 技术社区  · 14 年前
    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不能更新行,而直接调用printedsql呢?

    2 回复  |  直到 14 年前
        1
  •  0
  •   A-K    14 年前

    要查看实际的行数,可以在@DynamicSQL末尾添加SELECT@@ROWCOUNT。 您还可以启动一个探查器,看看实际执行的是什么。桌子上有触发器吗?

        2
  •  0
  •   Lieven Keersmaekers    14 年前

    如果执行以下语句,输出是否显示任何更新的行?

    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