2013-04-02 46 views
1

我正在寫一個基本上更新EstimatedDepartureDate所有日期字段到指定日期的查詢。我正在使用我創建的視圖來拉取更新的帳戶列表,並在擁有所有員工記錄的tnpEmployee表中運行此列表。然而,當運行此查詢時,它總是有類似的輸出:SQL Server查詢更新基於選擇 - 問題

(影響1行(S))

(55行(S)的影響)

如,它的首先影響一行,然後影響其餘行。當我在該視圖中運行SQL以查看感興趣的人員列表時,它在查詢的每次運行中顯示一個記錄,並且在該底部顯示一個數字減少(55行(s)受到影響),所以下一次運行會顯示54

這裏是我運行查詢:

UPDATE tnpEmployee 
SET tnpEmployee.EstimatedDepartureDate='2014-04-01 13:37:43.000' 
FROM tnpEmployee 
INNER JOIN vnpGetActiveAccountsAgainstToBeDisabled 
ON tnpEmployee.EmployeeID=vnpGetActiveAccountsAgainstToBeDisabled.EmployeeID 
WHERE tnpEmployee.Email=vnpGetActiveAccountsAgainstToBeDisabled.Email 

任何幫助將不勝感激,它的殺了我!所有需要發生的事情是獲取日期字段集的行,就是這樣,它們應該全部填充在我創建的基本視圖中,而不是每次運行時少一次。此外,當我運行的觀點,並得到一個記錄少,所有的記錄已經更新了新的日期..

+3

一種可能性是表'tmpEmployee'有一個更新觸發器。你能看到桌子上有什麼觸發器嗎? –

+0

我只是想說「尋找觸發器」。單獨的更新語句會在一個批次中執行所有操作,因此它不應顯示兩行「x rows affected」行。 –

+2

爲什麼你要更新視圖而不是直接表? – HLGEM

回答

0

你可以嘗試重寫你的SQL語句:

UPDATE tnpEmployee 
SET tnpEmployee.EstimatedDepartureDate='2014-04-01 13:37:43.000' 
WHERE tnpEmployee.EmployeeID IN (
SELECT vnpGetActiveAccountsAgainstToBeDisabled.EmployeeID 
FROM vnpGetActiveAccountsAgainstToBeDisabled 
WHERE tnpEmployee.Email=vnpGetActiveAccountsAgainstToBeDisabled.Email 
); 

正如專家已經建議,你的結果看起來像你的查詢調用一個觸發器。