SQL Server 2008 R2——TRUNCATE TABLE 無法截斷表 該表正由 FOREIGN KEY 約束引用


=================================版權聲明=================================

版權聲明:原創文章 止轉載 

請通過右側公告中的“聯系郵箱(wlsandwho@foxmail.com)”聯系我

勿用於學術性引用。

勿用於商業出版、商業印刷、商業引用以及其他商業用途。                   

 

本文不定期修正完善。

本文鏈接:http://www.cnblogs.com/wlsandwho/p/5126708.html

恥辱牆:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

沒啥說的,鄙視那些無視版權隨意抓取博文的爬蟲小網站站長。http://www.cnblogs.com/wlsandwho

下面開始點名

 

Asp.net教程_mvc4_C#_Ado.net_seo_Java_HTML CSS教程
www.tzwhx.com
www.th7.cn
解決方案網
幫客之家 | IT技術 建站編程 電腦教程 www.bkjia.com
軟件開發,程序錯誤,exception
www.java123.net
一鍵重裝系統_打造智能化重裝系統軟件
www.bitscn.com

 

=======================================================================

手冊上只說了:http://www.cnblogs.com/wlsandwho

可沒給例子。

今天有人問這個,我就索性寫了一個。

作為一只C++,每天在SQLServer群里做科普,好奇怪的樣子。http://www.cnblogs.com/wlsandwho

=======================================================================

下面的示例代碼中,表間關系為“表A的a引用表B中的b作為外鍵”。王林森,TRUNCATE TABLE,外鍵,表,該表正由 FOREIGN KEY 約束引用,無法,截斷,wlsandwho

試圖執行truncate table B

代碼需要一句一句執行:http://www.cnblogs.com/wlsandwho

 1 USE tempdb
 2 GO
 3 
 4 --創建表B
 5 CREATE TABLE tB(b NVARCHAR(10) PRIMARY KEY)
 6 GO
 7 --插入一個測試數據
 8 INSERT INTO tB
 9         ( b )
10 VALUES  ( N'wlsandwho'  -- b - nvarchar(10)
11           )
12 GO
13 
14 --創建表A
15 CREATE TABLE tA(a NVARCHAR(10) )
16 GO
17 --添加外鍵
18 ALTER TABLE tA 
19 ADD CONSTRAINT FK_fromBb FOREIGN KEY(a)
20 REFERENCES tB(b)
21 GO
22 
23 --添加測試數據
24 --INSERT INTO tA( a ) VALUES  ( N'thbytwo')--這一行無法運行,因為B.b中沒有這個值
25 INSERT INTO tA( a ) VALUES  ( N'wlsandwho')
26 GO
27 
28 --試圖截斷表B,失敗
29 TRUNCATE TABLE tB
30 GO
31 
32 --試圖清空表A后截斷表B,失敗
33 DELETE FROM tA
34 GO
35 SELECT * FROM tA
36 GO
37 TRUNCATE TABLE tB
38 GO
39 
40 --恢復之前的場景
41 INSERT INTO tA( a ) VALUES  ( N'wlsandwho')
42 GO
43 
44 --試圖先刪除外鍵再截斷,成功
45 ALTER TABLE tA DROP CONSTRAINT FK_fromBb
46 GO
47 TRUNCATE TABLE tB
48 GO
49 
50 --結論:不能對FOREIGN KEY約束引用的表使用 TRUNCATE TABLE
51 DROP TABLE tB
52 DROP TABLE tA
53 GO

順便說下,我很少用外鍵。因為我相信我的前台同學,也就是我。我也相信我的后台同學,也是我。我也相信我的數據庫同學,沒錯,還是我。http://www.cnblogs.com/wlsandwho

反正小作坊能跑就行了。什么?不能跑?我跑!http://www.cnblogs.com/wlsandwho

=======================================================================

用十分二十分鍾的時間自己動動手驗證一下,總比在企鵝群里傻傻的等答案要好。http://www.cnblogs.com/wlsandwho

=======================================================================

如果你們歷經千辛萬苦才找到這篇博客,那一定是下面的原因:http://www.cnblogs.com/wlsandwho

所以你需要點“推薦”和“關注”,這樣下次才能更快更好的找到資料。http://www.cnblogs.com/wlsandwho

=======================================================================

(友情支持請掃描這個)

微信掃描上方二維碼捐贈

=======================================================================

20160115

為了更完整和嚴密地說明問題,在44行之前再添加一個測試

1 --試圖先禁用外鍵再截斷,失敗
2 ALTER TABLE tA NOCHECK CONSTRAINT FK_fromBb
3 TRUNCATE TABLE tB
4 ALTER TABLE tA CHECK CONSTRAINT FK_fromBb

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM