请看下面的非常简单的外键约束:唯一索引在INFORMATION_SCHEMA不是唯一
CREATE TABLE [Person]([id] uniqueidentifier NOT NULL, [name] nvarchar(400) NULL)
GO
CREATE TABLE [Order]([id] uniqueidentifier NOT NULL, [pid] uniqueidentifier NOT NULL)
GO
/****** Index: [uindex] ******/
CREATE UNIQUE INDEX [uindex] on [Person] ([id])
GO
/****** ForeignKey: [FK_Order_Person] ******/
ALTER TABLE [Order] ADD CONSTRAINT [FK_Order_Person] FOREIGN KEY([pid])
REFERENCES [Person] ([id])
GO
你会先注意到,没有对[Person]
没有PK,只有一个唯一索引,让我建立外键参考[Person].[id]
。
[INFORMATION_SCHEMA].[REFERENTIAL_CONSTRAINTS]
显示我所期望的:将外键名称[FK_Order_Person]
与唯一约束名称[uindex]
链接起来的行。
所以我的问题是:被迫在SQL Server Compact中使用INFORMATION_SCHEMA
,我在哪里获得索引[uindex]
的表和列信息?
加入[KEY_COLUMN_USAGE]
不会产生任何结果,因为我没有主键。
在这个例子中,我能加入到[INFORMATION_SCHEMA].[INDEXES]
,但没有规定强制执行这个名字是表或模式的之间唯一的,所以如果存在同名的另一个唯一的密钥,那么我就不能工作了,其中这外国关键点。
所以你真正想要的不是索引信息,因为可能有一个你不感兴趣的唯一索引,而是你想要外键约束和它引用的字段。 –
正确。我在外键信息FK(表,列[s])之后引用(表,列[s])。 – johnDisplayClass