作为脚本的一部分,如果存在任何错误,将停止执行并回滚更改,我使用以下语句删除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架构集合,则不需要将其删除。
答案 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'
有关探索对象目录的更多信息,请查看这些问题: