當我們在寫sql腳本要對數據表中的數據進行修改的時候,為了防止破壞數據,通常在開發前都會對數據表的數據進行備份,當我們sql腳本開發並測試完成后,再把數據恢復回來。
目前備份數據,我常用的方法有以下幾種。
- 臨時表
- 導出腳本
- 復制數據到新表
臨時表
使用臨時表雖然簡單方便,但是它很不安全,如果數據庫重啟數據就丟失了,所以一般不建議用。使用臨時表的代碼。

USE TSQLFundamentals2008; GO -- 局部臨時表 IF OBJECT_ID('tempdb.dbo.#MyOrderTotalsByYear','U') IS NOT NULL DROP TABLE dbo.#MyOrderTotalsByYear; GO -- 創建局部臨時表 SELECT YEAR(orders.orderdate) AS orderyear,SUM(orderDetails.qty) AS qty INTO dbo.#MyOrderTotalsByYear FROM Sales.Orders AS orders LEFT JOIN Sales.OrderDetails AS orderDetails ON orders.orderid = orderDetails.orderid GROUP BY YEAR(orders.orderdate);
導出腳本
當數據量小的時候,我們可以使用sql server自帶的導出腳本功能將數據導出成sql腳本,但是當數據量大的時候(比如前段時間我導出一個表,50多萬條記錄,生成的腳本有1個多GB),生成的腳本體積很大,無法在SSMS中打開執行。雖然可以使用osql執行,不過速度很慢。
復制數據到新表
備份使用select * into [目標表] from [源表],恢復的時候insert into [源表] select * from [目標表],不過要注意主鍵是否自增,如果是自增的話,恢復的時候最好在INSERT INTO之前加上SET IDENTITY_INSERT [表名] ON語句。
所以總結起來,復制數據到新表的方式比較方便和可靠。