SQLServerで制約名を取得する
この記事では、特定のテーブルとカラムに対する制約名を効率的に取得する方法を解説する
システムビューで制約名を取得するクエリ
システムビューを利用して動的に制約名を取得する
DECLARE
@tableName VARCHAR(30),
@columnName VARCHAR(30),
@tableId VARCHAR(10),
@columnId VARCHAR(10)
--対象テーブルを指定
SET @tableName = 'TableName'
--対象列を指定
SET @columnName = 'ColumnName'
--対象テーブルの「テーブルID」を取得
SET @tableId = (SELECT id FROM sys.sysobjects WHERE xtype = 'U' AND name = @tableName)
--対象テーブルの「列ID」を取得
SET @columnId = (SELECT column_id FROM sys.columns WHERE object_id = @tableId AND name = @columnName)
--「テーブルID」と「列ID」を使用して、「制約名」を取得
SELECT
name AS '制約名'
FROM
sys.sysobjects
WHERE id = (SELECT constid FROM sys.sysconstraints WHERE id = @tableId AND colid = @columnId)
スクリプトの解説
- @tableName: 対象テーブルの名前
- @columnName: 対象カラムの名前
- @tableId: テーブルのシステムID
- @columnId: カラムのシステムID
- テーブルIDの取得:sys.sysobjectsビューを使用して、指定されたテーブル名に対応するIDを取得。xtype = 'U'は、ユーザー定義テーブルを示す
- カラムIDの取得:sys.columnsビューを使用して、指定されたカラム名に対応するIDを取得
- デフォルト制約名の取得:sys.sysobjectsとsys.sysconstraintsビューを組み合わせて、デフォルト制約の名前を取得