【问题标题】:SQL Server - Adding an XML Index to a calculated column on a ViewSQL Server - 将 XML 索引添加到视图上的计算列
【发布时间】: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, '&', '&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

【问题讨论】:

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


    【解决方案1】:

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

    您不能在视图中的 xml 列、具有 xml 列的表值变量或 xml 类型变量上创建 XML 索引,无论是主索引还是辅助索引。

    Here's a Tech Net article talking about this.

    【讨论】:

      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      相关资源
      最近更新 更多