我正在寫小型應用程序(在C#中),它可以幫助我截斷SQL Server 2005/08中的表。爲了截斷表,我想我需要做的是:SQL Server截斷表 - 刪除並重新創建FK約束腳本
- 下降,由表中的所有FK約束,
- 截斷表,
- 重建所有以前刪除的約束。
有人可以幫我創建這樣一個腳本,或指出我在哪裏可以找到一些線索嗎?
問候
我正在寫小型應用程序(在C#中),它可以幫助我截斷SQL Server 2005/08中的表。爲了截斷表,我想我需要做的是:SQL Server截斷表 - 刪除並重新創建FK約束腳本
有人可以幫我創建這樣一個腳本,或指出我在哪裏可以找到一些線索嗎?
問候
嗯,你可以從你的應用程序做到這一點:
您可以通過檢查系統目錄視圖來執行此操作。
此查詢會給你的所有的外鍵約束列表:
select
fk.name,
object_name(fk.parent_object_id) 'Parent table',
c1.name 'Parent column',
object_name(fk.referenced_object_id) 'Referenced table',
c2.name 'Referenced column'
from
sys.foreign_keys fk
inner join
sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
inner join
sys.columns c1 ON fkc.parent_column_id = c1.column_id and c1.object_id = fkc.parent_object_id
inner join
sys.columns c2 ON fkc.referenced_column_id = c2.column_id and c2.object_id = fkc.referenced_object_id
通過組合這些元素,你可以創建DROP CONSTRAINT
命令列表中的桌子上截斷之前運行:
select
'ALTER TABLE dbo.' + object_name(fk.parent_object_id) +
' DROP CONSTRAINT ' + fk.name
from
sys.foreign_keys fk
並且您還可以創建要在截斷後運行的ALTER TABLE
腳本以恢復外鍵關係。
select
'ALTER TABLE dbo.' + object_name(fk.parent_object_id) +
' ADD CONSTRAINT ' + fk.name +
' FOREIGN KEY(' + c1.name + ') REFERENCES dbo.' +
object_name(fk.referenced_object_id) + '(' + c2.name + ')'
from
sys.foreign_keys fk
inner join
sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
inner join
sys.columns c1 ON fkc.parent_column_id = c1.column_id and c1.object_id = fkc.parent_object_id
inner join
sys.columns c2 ON fkc.referenced_column_id = c2.column_id and c2.object_id = fkc.referenced_object_id
對於這兩個疑問,這是一個過程分爲兩個步驟:
限制:現在,該腳本假設和前提是你有單列外鍵的作用;如果你沒有這些,你可能需要稍微調整腳本。
完美,它可以幫助我很多,謝謝。保重。 – jwaliszko 2010-10-08 20:59:23
在企業管理器:
只要一點這個塊腳本的按摩,你可以讓你的drop constraint
和drop index
語句。最後刪除任何聚集索引,否則隨着時間的推移,您將重建其他索引。
執行你的滴,截斷表,然後執行你腳本編寫的創建。
此外:在完成此操作後立即執行數據庫備份,因爲任何truncate table
語句都會將事務日誌置於不確定狀態,因爲truncate table
語句不會記錄。
感謝您的幫助,但是我想在沒有管理工作室的情況下使用獨立的sql腳本(無論是否支持c#)來執行此操作。 – jwaliszko 2010-10-08 17:05:19
相關表中的數據如何?你可以孤兒嗎? – 2010-10-08 16:12:03
這不是問題,我會照顧的。 – jwaliszko 2010-10-08 16:16:15
您是否有權訪問Management Studio?或者你將不得不編寫自己的腳本? – 2010-10-08 16:19:44