2011-12-15 20 views
0

我想這段代碼放到一個sqldatabase在一個aspx環境的DeleteCommand:禁用和啓用約束暫時這樣我就可以刪除記錄

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 
    GO 
    DELETE FROM Sales.Individual 
    WHERE CustomerID ='20562' 
    GO 
    exec sp_msforeachtable @command1="print '?'", @command2="ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" 
    GO 

這樣我可以先禁用約束,刪除指定記錄,然後重新建立約束。我無法以某種方式讓它工作,有沒有人對我如何解決這個問題有任何想法?謝謝!

+6

我不會那樣做,如果我是你。一種解決方案是創建一個從所有相關表中刪除數據的存儲過程。如果由於某種原因想要保留相關信息,可以在Sales.Individual表上創建一個名爲「IsDeleted」的表格來報告。 – dana 2011-12-15 00:17:48

+2

思考如果這是我今年看到的最糟糕的主意......很有可能。 – 2011-12-15 06:55:19

回答

1

你真的需要考慮這一點。假設您禁用約束並刪除了記錄。您不能將限制放回,除非您還刪除了所有相關記錄,以防止您從第一個位置刪除原始位置。

您的選項是按順序刪除所有相關記錄,或者使您的關係級聯刪除。或者更好的是,不要刪除記錄 - 請參閱dana的建議。雖然我個人比IsDeleted bit null更喜歡使用Deleted datetime null

相關問題