如何指定计算的varchar列的宽度?

时间:2009-01-20 01:53:45

标签: sql-server-2005 tsql

我想在表中创建一个持久的计算列,以便我可以将它用作与另一个表的外键关系的一部分。

我有这些表格:

事件(EventID uniqueidentifier,EventCode varchar(8)) - EventCode是一个鉴别器列

缔约方(EventID uniqueidentifier)

...我想在“派对”中添加一个EventCode列,以便外键约束可以包含两列。

我试过这个:

ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED

但是这会将列添加为,dunno,char(5)或其他东西(因为列的类型是从表达式中推断出来的)。所以我无法将它与Event.EventCode联系起来,因为这两列的宽度不同。

有没有办法指定计算列的宽度,或者我必须这样做(这看起来很难看,但我认为会起作用)?

ALTER TABLE Parties ADD EventCode AS CAST('PARTY' AS varchar(8)) PERSISTED

1 个答案:

答案 0 :(得分:3)

您需要将值强制转换为所需的大小和数据类型。放入静态字符串将使SQL Server使用CHAR,因为它比VARCHAR更具成本效益。

如果你想在没有CAST的情况下进行定义,那么你需要将值填充到8个字符'PARTY',然后在进行连接时将其转换为VARCHAR(这会破坏数据库性能)。