我想在表中创建一个持久计算列,以便可以将其用作与另一个表的外键关系的一部分。
我有这些表:
Events (EventID uniqueidentifier, EventCode varchar(8)) -- EventCode 是鉴别列
各方(EventID 唯一标识符)
...我想向“Parties”添加一个 EventCode 列,以便外键约束可以包含这两列。
我已经尝试过这个:
ALTER TABLE Parties ADD EventCode AS 'PARTY' PERSISTED
但这会将列添加为,我不知道,char(5) 或其他内容(因为列的类型是从表达式推断出来的)。因此,我无法将其与 Events.EventCode 关联起来,因为两列的宽度不同。
有没有办法指定计算列的宽度,或者我必须这样做(这看起来很难看,但我认为会起作用)?
ALTER TABLE Parties ADD EventCode AS CAST('PARTY' AS varchar(8)) PERSISTED
最佳答案
您需要将值转换为您想要的大小和数据类型。放入静态字符串将使 SQL Server 使用 CHAR,因为这比 VARCHAR 更具成本效益。
如果您想在定义中不使用 CAST 来执行此操作,则需要将值填充为 8 个字符“PARTY”,然后在进行联接时将其强制转换为 VARCHAR(这会降低数据库性能)。
关于sql-server-2005 - 如何指定计算的 varchar 列的宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/459893/