有什么方法可以比较两个xml列模式,以便我可以触发该列的模式更新吗?
我知道如何查询架构的存在,但是无论如何,我可以将其与可能更新的架构进行比较吗?
select C2.name
from sys.columns as C1
inner join sys.xml_schema_collections as C2
on C1.xml_collection_id = C2.xml_collection_id
where C1.object_id = object_id('TableName') and
C1.name = 'ColumnName' and C2.name = 'SchemaName'
就像这样工作:
IF NOT EXISTS (< Actual schema compare >)
BEGIN
--ALTER COLUMN to xml
--DROP SCHEMA
--CREATE SCHEMA
--ALTER COLUMN to xml with schema again
END
xml_schema_namespace将以XML的形式为您提供集合中的模式。
SQL Server中存储的XML与用于创建架构的版本不完全相同。注释,空格和注释已删除,因此您必须在SQL Server中为要比较的架构创建一个临时集合,并使用该架构提取该架构xml_schema_namespace
。XML不具有直接可比性,因此nvarchar(max)
在比较模式集合之前必须将XML强制转换为XML 。
检查模式归类的存储过程可能看起来像这样。
create procedure dbo.CompareSchema
@NewSchema xml,
@RelationalSchema sysname,
@XMLSchemaCollectionName sysname,
@Diff bit out
as
begin
create xml schema collection dbo.__TempCollaction as @NewSchema;
if cast(xml_schema_namespace(@RelationalSchema, @XMLSchemaCollectionName) as nvarchar(max)) =
cast(xml_schema_namespace('dbo', '__TempCollaction') as nvarchar(max))
set @Diff = 0;
else
set @Diff = 1;
drop xml schema collection dbo.__TempCollaction;
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句