2008-12-11 73 views
2

我是一名兼職開發人員(全職學生)和我工作的公司使用SQL Server 2005中,我覺得奇怪有關SQL Server的事情,如果你這樣做,包括插入,更新等有一個腳本除了回滾或使用事務之外,沒有任何真正的方法可以撤消它。SQL服務器undo

你可能會說這兩個選項有什麼問題?那麼如果有人做了更新聲明並忘記放入WHERE條款,您突然發現自己有13k行更新,並且該表中的所有客戶端突然被命名爲'bob'。現在你有13k bobs的憤怒,因爲「某人」忘記了使用一個事務,並且如果你做了回滾,你將會取消其他領域需要的關鍵變化。

在我的學習中,我有Oracle。在Oracle中,您可以先運行該腳本,然後在發現沒有任何錯誤時提交該腳本。我想知道是否有什麼我在SQL Server中錯過了,因爲我在開發人員世界中還是比較新的。

回答

5

我不相信你錯過了什麼。使用事務來防止這種類型的錯誤是最好的機制,並且它與Oracle用於保護最終用戶的機制相同。不同的是,Oracle隱式地爲您開始一個事務,而在SQL Server中,您必須明確地執行它。

+0

那麼,如果一個人做了一個簡單的查詢,它會變成永久性的?不包括必須使用回滾 – Drahcir 2008-12-11 19:33:19

+0

是的,它基本上是在執行時提交的。 – 2008-12-11 19:36:37

0

我認爲交易運作良好。您可以回滾數據庫(到以前的備份或日誌中的點),但我認爲事務更簡單。

0

據我所知,SQL Server 2008中添加了審計功能,記錄用戶做出的各種數據庫的所有變化,也有回滾他們事後的選項。

再一次,這是從我讀過的或聽到我們的DBA,但可能值得研究。

編輯:尋找到它之後,它似乎只給回滾的架構更改,而不是數據修改(DDL觸發器)的能力。

0

如何:從不更改還沒有被一號您的開發服務器上測試生產數據庫,並試圖什麼是未探明之前,一定要備份。

+0

Ofcourse,我使用一個測試數據庫之前,對活的一個進行任何更改。但是每個人都容易出錯。 – Drahcir 2008-12-11 19:41:49

5

SET IMPLICIT_TRANSACTIONS是您可能正在尋找的東西。

0

如果我做的事情,在SQL Server中的任何風險,我寫這樣的劇本:

BEGIN TRAN

插入....無論

更新....無論

- 凱明

最後一行是有意的評論:我第一次運行前行,然後確保沒有錯誤,然後突出顯示算了筆他說,提交併執行。這是可行的,因爲在Management Studio中,您可以選擇T-SQL的一部分並執行選定的部分。

有幾個優點:隱式事務也可以工作,但它不是SQL Server的默認設置,因此您必須記住打開它或設置選項來執行此操作。而且,如果它總是處於開放狀態,我發現人們很容易「忘記」並且保留未提交的交易,這可能會阻止其他交易。這主要是因爲它不是默認行爲,SQL Server人員不習慣它。