模式集合应该允许您拥有不同版本的 XML 数据,而不必忽略验证。
首先看一下XML Schema Collections。
在您的 T-SQL 代码中,您将拥有类似这样的内容(此代码来自SQLskills.com的Bob Beauchemin ):
-- Load XML schema from file
DECLARE @x XML
SET @x = (
SELECT * FROM OPENROWSET(
BULK 'C:\invoice.xsd',
SINGLE_BLOB
) AS x
)
-- And use it to create an XML schema collection
CREATE XML SCHEMA COLLECTION InvoiceType AS @x
现在创建一个将列映射到模式集合的表:
CREATE TABLE invoice_docs (
invoiceid INTEGER PRIMARY KEY IDENTITY,
invoice XML(document InvoiceType)
)
现在,当您的架构更改时,您可以通过添加新版本的架构来修改架构集合:
DECLARE @x XML
SET @x = (
SELECT * FROM OPENROWSET(
BULK 'C:\invoice_v2.xsd',
SINGLE_BLOB
) AS x
)
-- And use it to create an XML schema collection
-- Allow V1 and V2 invoices
ALTER XML SCHEMA COLLECTION InvoiceType ADD @x
表中已有的旧数据将根据旧模式进行验证,任何新数据都将根据旧模式或新模式进行验证。
如果您只想针对较新的架构进行验证,则必须向该列添加额外的约束。