web-dev-qa-db-ja.com

制約が属するテーブルを見つける

特定の制約がどのテーブル(名前)に属しているかを調べる必要があります。

これを実現するためのTSQLを持っている人はいますか?

21
Mick Walker

多くのことが制約と見なされる可能性があります。

主キー
外部キー
一意のインデックス
チェック制約
列のデフォルト

あなたの質問は少し曖昧です。制約の名前、タイプなどを知っていますか?

あなたの質問の限られた情報に基づいています。 master.sys.sp_helpconstraint ストアドプロシージャのソースコードを確認することをお勧めします。

Sql Server Management Studioで、オブジェクトエクスプローラーを使用して、「データベース」-「システムデータベース」-「マスター」-「プログラマビリティ」-「ストアドプロシージャ」-「システムストアドプロシージャ」-「sys.sp_helpconstraint」に移動する必要があります。さまざまな種類の制約すべてをクエリするためのすべてのtsqlが含まれています。

2
KM.

これはsys.indexesにあるインデックスを見つけません

SELECT
   OBJECT_NAME(o.parent_object_id)
FROM
   sys.objects o
WHERE
   o.name = 'MyConstraintName' AND o.parent_object_id <> 0
31
gbn

gbn、あなたのソリューションはうまく機能しませんか?

SELECT
   OBJECT_NAME(o.parent_object_id)
FROM
   sys.objects o
WHERE
   o.name = 'MyConstraintName' AND o.parent_object_id <> 0

したがって、「MyConstraintName」が「FK_myConstraint」になると、クエリは次のようになります。

SELECT OBJECT_NAME(o.parent_object_id)
FROM sys.objects o
WHERE o.name = 'MyConstraintName' 
  AND o.parent_object_id <> 0

結果が出ない

(No column name)

あなたの「解決策」は、スキーマについての多くの明言されていない仮定に基づいていなければならないということは継ぎ目です。

1
Paul Gorbas