【问题标题】:Capture and run DDL on different schema在不同的架构上捕获和运行 DDL
【发布时间】:2013-07-16 14:52:18
【问题描述】:
我在名为 DBO 和 Switch 的数据库上有两个模式。我创建了这个 DDL 触发器,它将 DBO 上的 DDL 更改记录到表中。然后我检查受 DDL 影响的对象是否已分区,如果是,我在另一个模式 Switch 上运行相同的 DDL。除非用户没有在 DDl 语句中指定架构名称,否则这种方法可以正常工作。
我正在寻找一种方法来检查已发布的 DDl 是否存在架构名称,如果不存在,则默认情况下在 SWitch 架构上发布 DDL。
关于如何实现这一目标的任何想法?我是 TSQL 编码的新手,如果有人帮助我解决这个问题,我将不胜感激。
【问题讨论】:
标签:
database
ddl
ddl-trigger
【解决方案1】:
在可用于 DDL 触发器的 EVENTDATA 中,有以下字段(以及其他)可用:
<EVENT_INSTANCE>
<DatabaseName>RT-BOOKS</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>Books_PL$ID</ObjectName>
<TSQLCommand>
<CommandText>
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>
如果<SchemaName> 对您来说还不够(如果理解正确,您想检查用户是否在查询中明确使用了模式名称),然后尝试使用<SchemaName> 和<ObjectName> 解析<CommandText>。