データベースの移行中に、次の形式のデータベース テーブル制約に遭遇しました。
ALTER TABLE [dbo].[myTable]
ADD CONSTRAINT [someName] FOREIGN KEY ([id]) REFERENCES [dbo].[myTable] ([id])
ON DELETE NO ACTION
ON UPDATE NO ACTION
なぜこれを行うのでしょうか?これは、もともと Sybase データベースで行われていたもので、SQL Server 2008 R2 に変換しています。
UPDATE : はい、外部キー制約は同じテーブルと同じフィールドを参照するフィールドです。
ソースの Sybase データベースでこのクエリを実行したところ、これらのクレイジーなキーが 42 個定義されていることがわかったので、タイプミスではないようです。
SELECT sr.constrid as [Constraint ID],
so.name as [Table],
sc.name as [Column]
FROM sysreferences sr
INNER JOIN sysobjects so ON (so.id = sr.tableid)
INNER JOIN syscolumns sc ON (sc.id = sr.tableid AND sc.colid = sr.fokey1)
WHERE sr.tableid = sr.reftabid
AND sr.fokey1 = sr.refkey1
AND sr.fokey2 = 0
AND sr.refkey2 = 0