在数据库迁移期间,我遇到了以下形式的数据库表约束:
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。
更新:是的,外键约束是引用同一个表和相同字段的字段。
我在源 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