这个问题与 this one 非常相似,但对于 SQL Server 2005 :
我的数据库中有 2 个表:
--'#' denotes the primary key
[Libraries]
#ID #Application Name
1 MyApp Title 1
2 MyApp Title 2
[Content]
#ID Application LibraryID Content
10 MyApp 1 xxx
11 MyApp 1 yyy
(数据库显然要复杂得多,拥有这个双键是有道理的)
每个库都由其唯一 ID 和应用程序名称标识。我试图确保每个内容都正确地引用了现有的库。
创建约束时(使用向导)作为
Primary key table Foreign key table
[Libraries] [Content]
ID ---> LibraryID
Application ---> Application
我有以下错误:
The columns in table 'Libraries' do not match an existing primary key or UNIQUE constraint
你知道发生了什么吗?如果有可能使用 SQL Server? (我根本无法修改 [Library] 表)
非常感谢你的帮助!
最佳答案
当然,可以创建与复合(多列)主键的外键关系。你没有向我们展示你用来尝试建立这种关系的语句 - 它应该是这样的:
ALTER TABLE dbo.Content
ADD CONSTRAINT FK_Content_Libraries
FOREIGN KEY(LibraryID, Application)
REFERENCES dbo.Libraries(ID, Application)
你用的是那个??如
(ID, Application)
确实是 dbo.Libraries
上的主键,这个语句绝对有效。Luk:只是为了检查 - 你能在你的数据库中运行这个语句并报告输出是什么吗?
SELECT
tc.TABLE_NAME,
tc.CONSTRAINT_NAME,
ccu.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON ccu.TABLE_NAME = tc.TABLE_NAME AND ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE
tc.TABLE_NAME IN ('Libraries', 'Content')
关于sql - 外键引用 SQL Server 中的 2 列主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178709/