Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как создать тригеры в цикле по нескольким базам?  [new]
TimofeySin
Member

Откуда:
Сообщений: 38
Есть таблица в которой есть имя базы и текст запроса, создающего триггер.

Проблема в том, что "CREATE TRIGGER" можно создавать только в контексте текущей базы и Эта команда должны быть первой в запросе.

То есть я не могу написать
EXEC 'USE BASE; CREATE TRIGGER...'
потому что "CREATE TRIGGER" должны быть первой в запросе.
И не могу написать
EXEC 'USE BASE'; GO; EXEC 'CREATE TRIGGER...'
потому что "так как цель находится не в текущей базе данных".
Как можно решить эту проблему?

PS Ответ на: "а зачем тебе автоматом их создавать?"
Потому что 1С может поменять имена таблиц при реорганизации, а текст создания триггера я генерю в 1С каждый вечер и сверяю не поменялось ли чё...
23 июн 17, 16:18    [20586539]     Ответить | Цитировать Сообщить модератору
 Re: Как создать тригеры в цикле по нескольким базам?  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
EXECUTE somedb..sp_executesql ''

Бонусом - можно параметры передавать.
23 июн 17, 16:35    [20586611]     Ответить | Цитировать Сообщить модератору
 Re: Как создать тригеры в цикле по нескольким базам?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
TimofeySin,

напишите скрипт на JS или VBS и делайте, что хотите. Ну или новомодную PowerShell используйте.
23 июн 17, 17:09    [20586716]     Ответить | Цитировать Сообщить модератору
 Re: Как создать тригеры в цикле по нескольким базам?  [new]
TimofeySin
Member

Откуда:
Сообщений: 38
Руслан Дамирович
EXECUTE somedb..sp_executesql

Проблема в том что у меня и имя базы параметр....
А вот такое чет не работает никак...
exec @BaseName+'..sp_executesql @Query'

Владислав Колосов
напишите скрипт на JS или VBS и делайте, что хотите. Ну или новомодную PowerShell используйте.
это всмысле PowerShell ом всякие запросы кидать в sql.... Там такой гемор с правами, но видимо придеться
23 июн 17, 17:51    [20586897]     Ответить | Цитировать Сообщить модератору
 Re: Как создать тригеры в цикле по нескольким базам?  [new]
TimofeySin
Member

Откуда:
Сообщений: 38
Получилось
	set @BaseQuery = @BaseName + N'..sp_executesql @Query'
    EXECUTE sp_executesql @BaseQuery, N'@Query nvarchar(max)',@Query = @Query

Правда громозко, но норм. Спасибо Руслан Дамирович.
23 июн 17, 19:29    [20587112]     Ответить | Цитировать Сообщить модератору
 Re: Как создать тригеры в цикле по нескольким базам?  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
TimofeySin
Получилось
	set @BaseQuery = @BaseName + N'..sp_executesql @Query'
    EXECUTE sp_executesql @BaseQuery, N'@Query nvarchar(max)',@Query = @Query


Правда громозко, но норм. Спасибо Руслан Дамирович.
DECLARE @Proc NVARCHAR(MAX)=@BaseName+N'.sys.sp_executesql';
EXEC @Proc @Query, ...;
23 июн 17, 22:35    [20587438]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить