在表之间设置外键时是否可以忽略varchar长度?

时间:2013-05-29 02:03:34

标签: sql-server sql-server-2008 foreign-keys

我的SQL Server 2008中有两个表。

CREATE TABLE TABLE1 (
  field1 varchar(20) not null,
  field2 int,
  CONSTRAINT PK_TABLE1 PRIMARY KEY (field1)
)

CREATE TABLE TABLE2 (
  Id int,
  t1 varchar(10) not null
  t2 ntext
    CONSTRAINT PK_TABLE2 PRIMARY KEY (Id)
)

现在我想用table命令在table2上构建一个外键:

ALTER TABLE TABLE2  
ADD CONSTRAINT TABLE2_FK 
FOREIGN KEY (t1) REFERENCES TABLE1 (field1) 
  ON DELETE CASCADE ON UPDATE CASCADE

SQL Server响应Table2中的外键与field1中的Table1列的长度不同。

是否可以要求SQL Server忽略外键长度的验证?

感谢您的回答。

1 个答案:

答案 0 :(得分:3)

不,这是不可能的。在CREATE TABLE上的MSDN页面上,其中包含有关外键的部分:

  

表级FOREIGN KEY约束的REFERENCES子句必须   具有与列数相同的参考列数   约束列列表。 每个参考列的数据类型   也必须与列列表中的相应列相同。

当然,您可以创建一个计算列,将VARCHAR(10)转换为VARCHAR(20),然后设置外键。