J'ai une table qui stocke les valeurs séparées par des virgules dans un NVARCHAR (MAX).SQL Server - Ajout d'un index XML à une colonne calculée sur une vue
J'ai créé une vue qui utilise la manipulation de chaînes pour convertir ces valeurs séparées par des virgules en une liste XML. Je peux alors utiliser cette colonne Xml pour accéder à chaque élément.
Les requêtes sur cette colonne bénéficieront grandement si je pouvais l'indexer. Cependant, en essayant de créer un index XML primaire, je reçois le message suivant: "Voir les ennemis de XmlFoo n'ont pas de clé primaire en cluster La création d'un index XML nécessite une clé primaire en cluster sur la vue."
Est-il possible de faire ce que je veux, et si oui, comment puis-je ajouter une clé primaire à une vue comme elle le demande? Je ne pensais pas que c'était possible.
Mon exemple de script est le suivant.
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