mounaim Asked: 2014-08-07 03:59:04 +0800 CST2014-08-07 03:59:04 +0800 CST 2014-08-07 03:59:04 +0800 CST 主键和外键的大小 772 主键和引用它的外键在 sql server 2008 中是否必须具有相同的列大小?有人可以告诉我一个解释这个文档的链接吗? 谢谢你的帮助。 sql-server-2008 foreign-key 1 个回答 Voted Best Answer ypercubeᵀᴹ 2014-08-07T04:10:07+08:002014-08-07T04:10:07+08:00 是的。它在 MSDN 文档页面中:外键关系 在表级别指定的FOREIGN KEY约束必须具有与约束列列表中的列数相同的引用列数。每个引用列的数据类型也必须与列列表中的对应列相同。 该页面没有提供更多详细信息,但测试表明“相同数据类型”意味着相同类型和相同大小。此外,如果尝试FOREIGN KEY在例如 aVARCHAR(20)和VARCHAR(30)列之间进行约束, CREATE TABLE a ( aid VARCHAR(20) PRIMARY KEY ) ; CREATE TABLE b ( bid INT PRIMARY KEY, aID VARCHAR(30) ) ; ALTER TABLE b ADD CONSTRAINT test_different_sizes FOREIGN KEY (aid) REFERENCES a (aid) ; 我们得到解释性错误: 架构创建失败:列a.aid 的长度或比例b.aid与外键中的引用列不同test_different_sizes。参与外键关系的列必须定义为相同的长度和比例。 另请注意,某些 DBMS(如 Oracle、MySQL、Postgres)允许相同数据类型(即VARCHAR或CHAR)但大小不同的列之间的外键。 Postgres 更不严格。它允许列之间的外键CHAR,VARCHAR或TEXT任意组合的数据类型。
是的。它在 MSDN 文档页面中:外键关系
该页面没有提供更多详细信息,但测试表明“相同数据类型”意味着相同类型和相同大小。此外,如果尝试
FOREIGN KEY
在例如 aVARCHAR(20)
和VARCHAR(30)
列之间进行约束,我们得到解释性错误:
另请注意,某些 DBMS(如 Oracle、MySQL、Postgres)允许相同数据类型(即
VARCHAR
或CHAR
)但大小不同的列之间的外键。Postgres 更不严格。它允许列之间的外键
CHAR
,VARCHAR
或TEXT
任意组合的数据类型。