SQL Server - добавление индекса XML в вычисляемый столбец в представлении - PullRequest
2 голосов
/ 10 июня 2009

У меня есть таблица, в которой хранятся значения через запятую в 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

1 Ответ

1 голос
/ 10 июня 2009

Хорошо, я ответил на свой вопрос. Сообщение об ошибке, очевидно, представляет собой красную сельдь, вместо того, чтобы просто сказать, что вы не можете индексировать столбец xml в представлении, в котором упоминается первичный ключ!

Нельзя создать XML-индекс, первичный или вторичный, для столбца xml в представлении, для табличной переменной с столбцами xml или переменных типа xml.

Вот статья Tech Net, рассказывающая об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...