วิธีหนึ่งในการแก้ไขข้อ จำกัด ของดัชนีที่กรองคือมุมมองที่จัดทำดัชนี:
CREATE TABLE dbo.Table01 (
Column01 NVARCHAR(100)
);
GO
CREATE VIEW dbo.vw_Table01_Column01_LenOver5Unique
WITH SCHEMABINDING AS
SELECT Column01
FROM dbo.Table01
WHERE LEN(Column01) >= 5;
GO
CREATE UNIQUE CLUSTERED INDEX cdx
ON dbo.vw_Table01_Column01_LenOver5Unique(Column01);
GO
INSERT INTO dbo.Table01 VALUES('1'); --success
INSERT INTO dbo.Table01 VALUES('1'); --success
INSERT INTO dbo.Table01 VALUES('55555'); --success
INSERT INTO dbo.Table01 VALUES('55555'); --duplicate key error
GO
แก้ไข:
ฉันจะกำหนดมุมมองได้อย่างไรถ้าฉันมีสองคอลัมน์ในดัชนี สร้าง UNIQUE INDEX UIX_01 บน Table01 (คอลัมน์ 01, คอลัมน์ 02) WHERE LEN (คอลัมน์ 01)> = 5
วิธีการจัดทำดัชนีมุมมองสามารถขยายได้สำหรับคีย์ผสมโดยการเพิ่มคอลัมน์คีย์อื่น ๆ ในการกำหนดมุมมองและดัชนี ตัวกรองเดียวกันถูกนำไปใช้ในการกำหนดมุมมอง แต่ความไม่ซ้ำกันของแถวที่มีคุณสมบัติที่บังคับใช้โดยคีย์ผสมแทนที่จะเป็นค่าคอลัมน์เดียว:
CREATE TABLE dbo.Table01 (
Column01 NVARCHAR(100)
,Column02 NVARCHAR(100)
);
GO
CREATE VIEW dbo.vw_Table01_Column01_LenOver5Unique
WITH SCHEMABINDING AS
SELECT Column01, Column02
FROM dbo.Table01
WHERE LEN(Column01) >= 5;
GO
CREATE UNIQUE CLUSTERED INDEX cdx
ON dbo.vw_Table01_Column01_LenOver5Unique(Column01, Column02)
GO
INSERT INTO dbo.Table01 VALUES('1','A'); --success
INSERT INTO dbo.Table01 VALUES('1','A'); --success
INSERT INTO dbo.Table01 VALUES('55555','A'); --success
INSERT INTO dbo.Table01 VALUES('55555','B'); --success
INSERT INTO dbo.Table01 VALUES('55555','B'); --duplicate key error
GO