2005 年のドキュメントから、Xml 列からインデックス付きビューを作成できないことがわかります。
これは 2008 または 2008R2 で可能ですか? 追加されたものであるというドキュメントは見つかりませんが、確認を求めており、現時点では 2008 環境に簡単にアクセスできません。
編集
この背後にある私の動機は、Xml の量が増加し、Xml からのデータを集約する SSRS レポートが遅くなっていることです。
2005 年のドキュメントから、Xml 列からインデックス付きビューを作成できないことがわかります。
これは 2008 または 2008R2 で可能ですか? 追加されたものであるというドキュメントは見つかりませんが、確認を求めており、現時点では 2008 環境に簡単にアクセスできません。
編集
この背後にある私の動機は、Xml の量が増加し、Xml からのデータを集約する SSRS レポートが遅くなっていることです。
Depending on your need, what you could do is this:
create a set of stored functions that extract certain bits of key information from your XML (function receives XML as input, extracts the info using XPath/XQuery, returns a VARCHAR or INT or something value)
CREATE FUNCTION dbo.SomeFunction(@Input XML)
RETURNS VARCHAR(20)
WITH SCHEMABINDING
AS BEGIN
......
END
add those key bits to your base table as computed columns that reference those functions, with the PERSISTED
keyword:
ALTER TABLE dbo.YourTable
ADD ComputedColumns1 AS dbo.SomeFunction(XmlColumn) PERSISTED
create your view on the table and those computed columns, with schemabinding:
CREATE VIEW vYourView
WITH SCHEMABINDING
AS
SELECT (list of columns)
FROM dbo.YourTable
create a unique, clustered index on that view - unless you've violated any of the requirements of the indexed view, this should work just fine:
CREATE UNIQUE CLUSTERED INDEX CIX_YourView ON dbo.vYourView(.....)
This works fine if you need to extract a small number of key bits of information from an XML column - it's definitely not recommended for lots of XML elements / values.
これが可能だとは思いません。あなたが何をしようとしているのかについてのより良い説明がなければ、私が提供できる1つの提案は、挿入する前にXMLを引き離し(おそらくトリガーの代わりに使用するか、アプリケーション層でこのシュレッディングを行う)、部分を保存することです。別の非 XML 列のインデックス付きビューに使用したい。