我能否在计算列上创建索引?

3

我的表格有如下结构。

CREATE TABLE [dbo].[Word] (
    [WordId]       VARCHAR (20) NOT NULL,
    [CategoryId]   INT          DEFAULT ((1)) NOT NULL,
    PRIMARY KEY CLUSTERED ([WordId] ASC),
);

我想做的是添加一个名为“Ascii”的列,定义为(ASCII([WordId]))。请问我是否可以添加此列,并在该列+ WordId + CategoryId上创建索引?另外,我可以这样做并基于已有的数据自动更新它吗?
1个回答

4
你可以通过将计算列设置为持久化来实现这一点。
引用自MSDN
指定SQL Server数据库引擎在表中物理存储计算值,并在计算列依赖的任何其他列更新时更新值。将计算列标记为PERSISTED可让您在确定性计算列上创建索引。
CREATE TABLE [dbo].[Word] 
(
    [WordId]       VARCHAR (20) NOT NULL,
    [CategoryId]   INT          DEFAULT ((1)) NOT NULL,
    [Ascii]        as (ASCII([WordId])) persisted,
    PRIMARY KEY CLUSTERED ([WordId] ,[CategoryId],[Ascii] ),
);

要通过添加计算列来修改表,请使用以下方法:

ALTER TABLE [dbo].[Word] ADD [Ascii] AS (ASCII([WordId])) persisted;

谢谢。你能告诉我如何修改表格吗?当它更改表格时,它会检查已经存在的数据吗? - Samantha J T Star
@SamanthaJ - 已更新。对于现有记录,计算列中也将填充ASCII值。 - Pரதீப்

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接