Могу ли я написать триггер DDL в SQL Server 2008 для автоматического создания ключей на основе имени столбца?

Я никогда не писал триггер DDL, но насколько я понимаю, они запускают SQL при изменении схемы. Я ищу, чтобы упростить повторяющиеся задачи. Я не уверен, действительно ли они предназначены только для целей аудита.

  • For an int field [id] in the first ordinal position:
    • make it the primary key
    • установить начальное значение/приращение идентичности 1
  • For a varchar field [name] in the second ordinal position:
    • make it a unique key

По сути, вопрос таков: подходят ли триггеры DDL в SQL Server 2008 для того, что я хочу сделать? (И, если вы уже сделали это и у вас есть код sql, не могли бы вы вставить его?)


person Aaron Anodide    schedule 13.02.2011    source источник
comment
я стараюсь принять, когда ответ помогает мне; это бы сохранило качество, если бы все делали то же самое, верно? Я посмотрю, хотя, поскольку я хочу быть справедливым.   -  person Aaron Anodide    schedule 13.02.2011


Ответы (1)


Триггеры DDL не подходят для того, что вы хотите сделать.

Триггеры DDL запускаются после того, как таблица уже создана.

Столбец не может иметь свойство identity, добавленное задним числом, что означало бы, что ваш триггер должен будет использовать динамический SQL, чтобы немедленно удалить вновь созданную таблицу и воссоздать ее.

Даже если предположить, что это только для личного проекта, поэтому у вас нет коллег-разработчиков, которые должны беспокоиться о неожиданностях, и вас не беспокоит аспект неэффективности, генерирующий сценарий create, будет сложно сделать надежно, независимо от того, пытаетесь ли вы начать с нуля или анализируете код. CommandText в качестве отправной точки.

Если это распространенный шаблон для вас, вы можете изучить возможность создания пользовательского шаблона CREATE TABLE в обозревателе шаблонов SSMS.

person Martin Smith    schedule 13.02.2011
comment
Спасибо за совет. под динамическим sql вы имеете в виду построение строки tsql или вставку строк в представления information_schema? - person Aaron Anodide; 13.02.2011
comment
Динамический SQL включает в себя создание строки TSQL, вы не можете изменить структуру таблицы, изменив эти представления. - person Martin Smith; 13.02.2011