2017-10-12 20 views
1

我有一個數據庫,其中一些表中有一些字段有約束。我自己命名了一些這些約束條件,但是其他一些約束條件會自動生成。如何選擇所有自動命名約束sql

我想選擇所有這些約束。我正在使用

SELECT * FROM sys.objects 
WHERE type_desc LIKE '%CONSTRAINT' 

獲取所有約束。但是有很多,我無法手動找到它們。這些名稱是不可預知的,使用字母數字字符如PK__getParen__50EEF97F6BC33CCA 如何區分我已命名自己並自動命名的約束?

+2

[SQL服務器2008 - 獲取表約束](可能的重複https://stackoverflow.com/questions/14229277/sql-server-2008-get-table-constraints ) – brykneval

+0

似乎有點類似,但這主要集中在查找系統生成名稱的約束。 – mendosi

回答

1

sys.check_constraintssys.key_constraintssys.default_constraintssys.foreign_keys視圖包含一列is_system_named應該告訴你,如果自動生成的約束的名稱。

0

在對象資源管理器的「數據庫」文件夾的「系統數據庫」文件夾的「主數據庫」文件夾中的「視圖」文件夾的「系統視圖」文件夾中,有許多與CONSTRAINT相關的視圖。 ..

即:除非它已經打開,否則從視圖選項卡打開對象資源管理器。

數據庫>系統數據庫> master> Views>系統視圖。

只需將它們作爲(例如)SELECT * FROM INFORMATION_SCHEMA.CHECK_CONSTRAINTS運行,您應該可以找到您要查找的內容。

0

嘗試類似:

SELECT * 
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
    WHERE CONSTRAINT_NAME NOT LIKE 'PK_%'