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

标签 sql-server-2005 t-sql

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

我有这些表:

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/

相关文章:

加入所需的 SQL Server 查询帮助

sql - 什么是更快的查询(选择名称....或选择顶部(1)名称

sql-server - 使用 SQL Server Management Studio 生成脚本时,不要保护触发器

sql-server - 创建存储过程时出现问题

sql - 在查询结果中显示表名; SQL Server 2008

t-sql - SqlDataReader 执行 SQL 比 Management Studio 执行 SQL 更快

sql - 从已经严格格式化的 SQL 日期时间字符串中提取日期作为 UNIX 时间戳

sql-server-2005 - 如何获取sql server中最后插入的行

sql - SQL 中基于下一条记录和上一条记录的复杂排序

SQL打乱数据库varchar字段