指定要包含在T-SQL中的复合索引中的字符数

时间:2014-04-20 09:42:44

标签: sql-server tsql

我正在重复使用SSQL数据库中PostgreSQL模式的部分内容。

这是我的SQL语句的片段:

CREATE TABLE pac_region 
(id INTEGER NOT NULL PRIMARY KEY,
 country_id INTEGER REFERENCES Country(id) ON UPDATE CASCADE ON DELETE NO ACTION,
 name VARCHAR(256) NOT NULL
);

CREATE UNIQUE INDEX idxu_pac_region_name ON pac_region(country_id, name(32));

我想指定只有名称的前32个字符需要是唯一的(当与country_id结合使用时)。

(32)规范的SSMS barfs。在TSQL中限制复合索引中使用的文本长度的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我认为您不能在列上创建部分索引,就像您正在尝试的那样。 相反,您可以创建persisted computed column并在该列上添加索引,如

取自Create Index on partial CHAR Column

alter table pac_region 
add Computed_Name as cast(name as varchar(32)) persisted;

CREATE UNIQUE INDEX idxu_pac_region_name 
ON pac_region(country_id, Computed_Name);

(OR)

可能通过创建索引视图。