【发布时间】:2010-11-01 20:49:59
【问题描述】:
我有一个表,它在 NVARCHAR(MAX) 中存储逗号分隔值。
我创建了一个视图,它使用字符串操作将这些逗号分隔值转换为 xml 列表。然后我可以使用这个 Xml 列访问每个项目。
如果我可以为它编制索引,该列上的查询将受益匪浅。但是,在尝试创建主 XML 索引时,我收到消息“查看 XmlFoo 敌人没有聚集主键。创建 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, '&', '&'), '>', '>'), '<', '<'), '"', '"'), '''', '''), ',', '</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
【问题讨论】:
标签: sql-server xml sql-server-2005 indexing