9

テーブル内の複数の外部キーから 1 つの外部キーを取得したい。テーブル オプションを展開すると、SQL Server の GUI インターフェイスで「Keys」というフォルダが表示されます。このフォルダには、1 つの主キーと複数の外部キーがあります。私の例では、Customer、Orders、Items の 3 つのテーブルがあります。Customer はプライマリとして Customer_ID を持ち、Items はプライマリとして Item_ID を持ち、Orders はプライマリとして Order_ID を持ち、外部キー Customer_nbr は顧客 (Customer_ID) を参照し、外部キー item_nbr はアイテム (Item_ID) を参照します。

その「キー」フォルダには、「FK_ Orders _Customer__38996AB5」のようなキーの名前があります。

問題は、顧客の言葉に続く番号「38996AB5」が固定されていないことです。制約を削除してから再確立すると、変更されます (セキュリティ上の理由など)。

そのため、どのようなものであってもそのキーを取得するために入力できる SQL コマンドを探しています。論理的には、キーワード "LIKE" (つまり ... like = 'FK_ Orders _Customer__%') を使用できますが、それをどこにどのように配置すればよいかわかりませんでした。

前もって感謝します。

4

2 に答える 2

8

これが別のバージョンです。テーブルと、私が推測する親テーブル/列名でフィルタリングできます。

SELECT 
  [ForeignKey] = f.name
, [TableName] = OBJECT_NAME(f.parent_object_id), COL_NAME(fc.parent_object_id,fc.parent_column_id)
, [ReferenceTableName] = OBJECT_NAME (f.referenced_object_id)
, ReferenceColumnName = COL_NAME(fc.referenced_object_id, fc.referenced_column_id)
FROM 
sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id
WHERE name LIKE '%the_fk_name%'

より良いアイデア:

作成時に FK に名前を付けます。

ALTER TABLE [dbo].ChildTable
ADD CONSTRAINT ChildTableToParentTableFK  /* A strong name */
    FOREIGN KEY ( ParentTableKey )
        REFERENCES [dbo].ParentTable ( ParentTableKey  )
GO
于 2013-07-15T17:39:06.140 に答える
2

使用する:

SELECT *
FROM sys.foreign_keys
WHERE name LIKE '%yourForeignKeyName%'
于 2013-07-15T17:35:15.933 に答える