比较xml模式列以获取更新脚本

马丁·昂唐格(Martin Ongtangco)

有什么方法可以比较两个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
米卡尔·埃里克森(Mikael Eriksson)

xml_schema_namespace将以XML的形式为您提供集合中的模式。

SQL Server中存储的XML与用于创建架构的版本不完全相同。注释,空格和注释已删除,因此您必须在SQL Server中为要比较的架构创建一个临时集合,并使用该架构提取该架构xml_schema_namespaceXML不具有直接可比性,因此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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章