2010-03-24 22 views
3

我需要備份SQL Server數據庫中的大量數據,並導入另一個環境進行更新和測試。因爲我對數據不感興趣,所以我只想在其他服務器上重新創建模式。有一個名爲「生成腳本」的選項,但會在目標服務器上運行錯誤。用於清除數據庫表的SQL腳本

好奇的是,如果有人試圖編寫一個SQL腳本來運行db中的所有表並清除行,從而我可以創建架構備份爲.bak文件並將其還原到另一個服務器中。

回答

3

要小心,但是,這個做的。它會清空數據庫中的所有表。

-- disable referential integrity 
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 

-- print table name 
EXEC sp_MSForEachTable 'truncate table ?' 

-- enable referential integrity again 
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 
+0

@Don:運行腳本似乎並未禁用約束。截斷表時出現依賴關係錯誤。 – pencilslate 2010-03-24 22:11:16

+0

您收到的確切錯誤是什麼? – 2010-03-25 02:10:20

+0

不能截斷表'dbo.tbl_Questions',因爲它正在被FOREIGN KEY約束引用。 – MikeKusold 2011-07-28 14:35:58

3

Red Gate生成一個名爲Sql Compare的產品,您可以使用該產品將架構從一個Sql Server數據庫同步到另一個。這可能比自己編寫一些腳本容易得多,而且它允許您在兩個數據庫稍後不同步時輕鬆傳輸更改。這不是免費的產品,但是您可以在14天的試用期內免費使用它。

+1

+1:使用RedGate,您還可以將現有數據庫「反向工程」爲一組腳本文件,然後您可以使用該模式使用RedGate構建另一個數據庫實例。這爲您提供了實際版本控制數據庫模式的好處。像RedGate這樣的另一個產品是dbGhost(http://www.innovartis.co.uk/products/products.aspx)。 – van 2010-03-24 21:00:16

1

您需要:

  1. 禁用每個約束在表上
  2. 截斷表
  3. 重新創建約束