我想在表中创建一个持久的计算列,以便我可以将它用作与另一个表的外键关系的一部分。
我有这些表格:
事件(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
答案 0 :(得分:3)
您需要将值强制转换为所需的大小和数据类型。放入静态字符串将使SQL Server使用CHAR,因为它比VARCHAR更具成本效益。
如果你想在没有CAST的情况下进行定义,那么你需要将值填充到8个字符'PARTY',然后在进行连接时将其转换为VARCHAR(这会破坏数据库性能)。