Захват и запуск DDL на другой схеме

У меня есть две схемы в базе данных с именами DBO и Switch. Я создал этот триггер DDL, который записывает изменения DDL в DBO в таблицу. Затем я проверяю, разделены ли объекты, затронутые DDL, и если да, я запускаю тот же DDL на другом коммутаторе схемы. Этот подход работает нормально, если пользователь не укажет имя схемы в операторе DDl.

Я ищу способ проверить выданный DDl на наличие имени схемы, а если нет, то выдать DDL по умолчанию в схеме SWitch. Любые идеи о том, как я могу достичь этого? Я новичок в кодировании TSQL и был бы признателен, если бы кто-нибудь помог мне с этим.


person sdave    schedule 16.07.2013    source источник


Ответы (1)


В EVENTDATA, доступных для использования в DDL Trigger, доступны следующие поля (среди прочего):

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

Если <SchemaName> вам недостаточно (если вы правильно поняли, вы хотите проверить, не использовал ли пользователь явно имя схемы в запросе), то попробуйте разобрать <CommandText> с помощью <SchemaName> и <ObjectName>.

person AdamL    schedule 02.12.2013