2010-08-26 36 views
0
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內部更新查詢不更新數據?

現在什麼可能是EXEC無法更新行,並直接調用PRINTED SQL呢?

+0

我在更新查詢中使用了「FROM USER U」,但是如果我直接複製並執行它,PRINT(@DynamicSql)生成的輸出會執行並更新行。 – 2010-08-26 08:18:00

回答

0

要查看實際的行數,您可以在@DynamicSQL的末尾添加SELECT @@ ROWCOUNT。 您也可以啓動分析器並查看實際執行的內容。桌子上有觸發器嗎?

+0

@Anil,什麼,在最後,是真正的錯誤? – 2010-08-27 07:07:04

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 
+0

不需要更新:( – 2010-08-26 09:14:53

+0

我認爲當你執行生成的SQL時,它會輸出行嗎?你是否看過查詢計劃?如果你可以對兩個計劃進行比較,那可能會給你一個線索 – 2010-08-26 09:39:24