1. ホーム
  2. sql

[解決済み] INFORMATION_SCHEMAを使用してデフォルトの制約を見つけるにはどうしたらいいですか?

2022-07-20 10:45:39

質問

与えられたデフォルト制約が存在するかどうかをテストしようとしています。sysobjectsテーブルではなく、より標準的なINFORMATION_SCHEMAを使用したいと思っています。

以前、テーブルと主キー制約をチェックするためにこれを使用したことがありますが、デフォルト制約はどこにも見当たりません。

ないのでしょうか?(MS SQL Server 2000を使用しています)。

EDIT: 制約名で取得したいのですが。

どのように解決するのですか?

私の理解では、デフォルト値制約はISO標準の一部ではないので、INFORMATION_SCHEMAに表示されません。INFORMATION_SCHEMA はクロスプラットフォームなので、この種のタスクに最適のように思えますが、情報が利用できない場合は、SQL Server 2005 以降では非推奨のシステム テーブル ビューの代わりにオブジェクト カタログ ビュー (sys.*) を使用する必要があります。

以下は @user186476 さんの回答とほぼ同じです。これは、指定された列のデフォルト値制約の名前を返します。(SQL Server 以外のユーザーの場合、デフォルト制約を削除するにはデフォルトの名前が必要で、デフォルト制約に自分で名前をつけないと、SQL Server は "DF_TableN_Colum_95AFE4B5" のようなおかしな名前を作成します)。将来的にスキーマを変更しやすくするために、常に制約に明示的に名前を付けてください!)

-- returns name of a column's default value constraint 
SELECT
    default_constraints.name
FROM 
    sys.all_columns

        INNER JOIN
    sys.tables
        ON all_columns.object_id = tables.object_id

        INNER JOIN 
    sys.schemas
        ON tables.schema_id = schemas.schema_id

        INNER JOIN
    sys.default_constraints
        ON all_columns.default_object_id = default_constraints.object_id

WHERE 
        schemas.name = 'dbo'
    AND tables.name = 'tablename'
    AND all_columns.name = 'columnname'