在不同的模式上捕获并运行DDL

时间:2013-07-16 14:52:18

标签: database ddl ddl-trigger

我在名为DBO和Switch的数据库上有两个模式。我已创建此DDL触发器,将DBO上的DDL更改记录到表中。然后,我检查受DDL影响的对象是否已分区,如果是,则在另一个模式Switch上运行相同的DDL。除非用户未在DDl语句中指定模式名称,否则此方法可以正常工作。

我正在寻找一种方法来检查已发布的DDl是否存在模式名称,如果不存在,则默认情况下在SWitch模式上发出DDL。 有关如何实现这一目标的任何想法?我是TSQL编码的新手,非常感谢有人帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

在DDL触发器中可用的EVENTDATA中,有以下字段(包括其他字段):

<EVENT_INSTANCE>
  <DatabaseName>RT-BOOKS</DatabaseName>
  <SchemaName>dbo</SchemaName>
  <ObjectName>Books_PL$ID</ObjectName>
  <TSQLCommand>
    <CommandText>
    </CommandText>
  </TSQLCommand>
</EVENT_INSTANCE>

如果<SchemaName>对您来说不够(如果理解正确,您想检查用户是否在查询中明确使用了架构名称),请尝试使用<CommandText>解析<SchemaName><ObjectName>