我从2005 documentation看到您无法从Xml列创建索引视图。
这可能在2008年或2008年2月?我找不到任何文档说这是添加的东西,但我正在寻找确认,而且我目前还没有方便地访问2008环境。
修改
我背后的动机是Xml的数量正在增长到SSRS报告来自Xml的聚合数据变慢的程度。
答案 0 :(得分:6)
根据您的需要,您可以做的是:
创建一组存储函数,从XML中提取某些关键信息(函数接收XML作为输入,使用XPath / XQuery提取信息,返回VARCHAR或INT或其他值)
CREATE FUNCTION dbo.SomeFunction(@Input XML)
RETURNS VARCHAR(20)
WITH SCHEMABINDING
AS BEGIN
......
END
使用PERSISTED
关键字将这些关键位作为引用这些函数的计算列添加到基表中:
ALTER TABLE dbo.YourTable
ADD ComputedColumns1 AS dbo.SomeFunction(XmlColumn) PERSISTED
使用schemabinding:
在表和那些计算列上创建视图CREATE VIEW vYourView
WITH SCHEMABINDING
AS
SELECT (list of columns)
FROM dbo.YourTable
在该视图上创建一个唯一的聚簇索引 - 除非您违反了索引视图的任何要求,否则这应该可以正常工作:
CREATE UNIQUE CLUSTERED INDEX CIX_YourView ON dbo.vYourView(.....)
如果您需要从XML列中提取少量关键信息,这可以正常工作 - 绝对不建议使用大量XML元素/值。
答案 1 :(得分:3)
我不相信这是可能的。如果没有更好地解释你想要做什么,我可以提供的一个建议是在插入之前将XML拉开(可能使用而不是触发器,或者在应用程序层执行此碎化)并存储部件想要在单独的非XML列中使用索引视图。