SQL Server - 将XML索引添加到View上的计算列

时间:2009-06-10 15:55:27

标签: sql-server xml sql-server-2005 indexing

我有一个表,用于在NVARCHAR(MAX)中存储逗号分隔值。

我创建了一个视图,它使用字符串操作将这些逗号分隔值转换为xml列表。然后,我可以使用此Xml列访问每个项目。

如果我可以对此列进行索引,那么此列上的查询将会受益匪浅。但是,在尝试创建主XML索引时,我收到消息“查看XmlFoo foes没有群集主键。创建XML索引需要视图上的群集主键。”

是否有可能做我想要的事情,如果是这样,我怎样才能在视图中向视图添加主键?我认为这不可能。

我的示例脚本如下。

CREATE TABLE [dbo].[Foo](
    [FooId] [int] IDENTITY(1,1) NOT NULL,
    [FooValues] NVARCHAR(MAX),
    CONSTRAINT [PK_Foo] PRIMARY KEY CLUSTERED 
    (
        [FooId] ASC
    )ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE VIEW [dbo].[XmlFoo] WITH SCHEMABINDING
AS
SELECT
    FooId,
    FooValues,
    CONVERT(xml, '<FooValues><FooValue>' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(FooValues, '&', '&amp;'), '>', '&gt;'), '<', '&lt;'), '"', '&quot;'), '''', '&apos;'), ',', '</FooValue><FooValue>') + '</FooValue></FooValues>') AS XmFoolValues
FROM
    [dbo].[Foo]
GO

INSERT INTO XmlFoo (FooValues) VALUES ('A,B,C')
INSERT INTO XmlFoo (FooValues) VALUES ('1,2')
INSERT INTO XmlFoo (FooValues) VALUES ('X,Y')
INSERT INTO XmlFoo (FooValues) VALUES ('I')
INSERT INTO XmlFoo (FooValues) VALUES ('9,8,7,6,5')
GO
SELECT * FROM XmlFoo

1 个答案:

答案 0 :(得分:1)

好的,我已经回答了我自己的问题。错误消息显然是一个红色的鲱鱼,而不仅仅是说你不能索引一个视图上的xml列,它提到了一个主键!

您无法在视图的xml列,xml列的表值变量或xml类型变量上创建主索引或辅助索引。

Here's a Tech Net article talking about this.