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

Sql server 2005 如何指定计算的varchar列的宽度?,sql-server-2005,tsql,Sql Server 2005,Tsql,我想在一个表中创建一个持久化的计算列,这样我就可以将它用作与另一个表的外键关系的一部分 我有这些桌子: 事件(EventID uniqueidentifier,EventCode varchar(8))--EventCode是一个鉴别器列 双方(EventID唯一标识符) 。。。我想在“Parties”中添加一个EventCode列,这样外键约束可以同时包含这两个列 我试过这个: ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED 但我

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

我有这些桌子:

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

双方(EventID唯一标识符)

。。。我想在“Parties”中添加一个EventCode列,这样外键约束可以同时包含这两个列

我试过这个:

ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED
但我不知道,这会将列添加为char(5)或其他内容(因为该列的类型是从表达式推断出来的)。因此,我无法将其与Events.EventCode联系起来,因为这两列的宽度不同

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


您需要将值强制转换为所需的大小和数据类型。放入静态字符串将使SQLServer使用CHAR,因为这比VARCHAR更经济高效


如果希望在定义中不使用强制转换,则需要将值填充到8个字符的“PARTY”,然后在执行联接时将其强制转换为VARCHAR(这会降低数据库性能)。

谢谢Denny先生。令人失望,但我想这只是一个一次性的打击,当它创建的行,因为它的持久性。
ALTER TABLE Parties ADD EventCode AS CAST('PARTY' AS varchar(8)) PERSISTED