sql - 外键引用 SQL Server 中的 2 列主键

标签 sql sql-server-2005 foreign-key-relationship

这个问题与 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/

相关文章:

sql - 在 Oracle 11g 中如何将分区表从一个表空间移动到另一个表空间?

mysql - 执行查询时出现 SQL 错误

mysql - 如果我有一个没有数据的 VARCHAR(32),它会占用空间吗?

c# - CLR聚合函数C#中的列表序列化

java - 在 JTable 中为数据库外键添加组合框

asp.net-mvc - 如何在 ASP.NET MVC 中显示外键字段的显示名称

java - 使用 java 列表填充 phpMyAdmin 表

sql - 修改SQL Server中的xml元素名称

sql-server-2005 - sql临时表@tmp vs #tmp

sql - 使用 MS Access SQL 查询创建与现有表具有一对一关系的第二个表