检查XML Schema Collection的用法?

时间:2017-03-29 13:15:01

标签: sql-server tsql

作为脚本的一部分,如果存在任何错误,将停止执行并回滚更改,我使用以下语句删除xml架构集合(如果存在)

IF EXISTS (SELECT * FROM sys.xml_schema_collections WHERE name = 'MyXMLSchemaCollection')
BEGIN
    PRINT 'Drop MyXMLSchemaCollection';
    DROP XML SCHEMA COLLECTION MyXMLSchemaCollection;
END
GO

除了正在使用架构集合时,这很好用,其结果是如下错误:

  

指定的集合'MyXMLSchemaCollection'无法删除,因为它由对象'MyObject'使用。

如果数据库中的任何对象没有使用架构集合,我将如何仅删除架构集合?如果正在使用xml架构集合,则不需要将其删除。

1 个答案:

答案 0 :(得分:1)

使用MSDN文档the comments on this answer中的示例XML Schema Collection我发现您可以使用以下命令确定表格是否正在引用XML Schema Collection:

select distinct t.name from sys.tables t
left join sys.columns c ON c.object_id = t.object_id
left join sys.xml_schema_collections x ON x.xml_collection_id = c.xml_collection_id
where x.name = 'MyXMLSchemaCollection'

对于存储过程,我想其他对象类型sys.sql_expression_dependencies表将对您有用。

select 
    *
from sys.sql_expression_dependencies sed
left join sys.objects o ON o.object_id = sed.referencing_id
where referenced_entity_name = 'MyXMLSchemaCollection'

有关探索对象目录的更多信息,请查看这些问题: