問題:
SQLServerのテーブルで制約の名前を検索する必要があります。
例:
テーブルstudent
。
解決策:
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
結果は次のとおりです。
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
学生 | 主キー | PK__student__3213E83F357C7D1D |
学生 | ユニーク | UQ__student__24E2EDD2AC2A7D87 |
学生 | チェック | CK__student__age__4E88ABD4 |
学生 | 外部キー | FK__student__country__4F7CD00D |
ディスカッション:
ビューtable_constraints
information_schema
スキーマ。列table_name
制約が定義されているテーブルの名前と、列constraint_name
が表示されます。 制約の名前が含まれます。列constraint_type
制約のタイプを示します:PRIMARY KEY
主キータイプの場合、FOREIGN KEY
外部キータイプの場合、UNIQUE
一意の値については、CHECK
制約チェック用。
たとえば、student
テーブルの制約名はPK_student_3213E83F357C7D1D
。 constraint_type
列には、各制約のタイプに関する情報が表示されます。主キーの場合は、PRIMARY KEY
です。 。 table_name
このビューの列は、この制約が含まれているテーブルを示しています。
ただし、DEFAULT
を選択する場合 データベースからの制約については、以下のクエリを使用してください。
SELECT c.name, c.definition FROM sys.default_constraints c JOIN sys.objects o ON o.object_id = c.parent_object_id WHERE o.name ='student';
結果は次のとおりです。
name | 定義 |
---|---|
DF__student__name__4D94879B | ( "不明") |
DEFAULT
の名前 制約は列名に格納されますが、値は列definition
にあります 。ビューに参加するsys.default_constraint
sおよびsys.objects
特定のテーブル(この例では、テーブルstudent
)WHERE句を使用します。制約名には、テーブルの名前が含まれています(student
)と列の名前(name
。