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

Откуда: Левый берег
Сообщений: 415
Здравствуйте.

Намудрил с триггерами и понял что ранее было хорошо. Хочу вернуть из бэкапа

Текущая версия БД называется Cur, БД из бэкапа Old. Как быть ...
1. Удалить все триггеры в текущей версии
2. Открыть все триггеры из старой БД и создать в тек. версии

первое хочу сделать так


USE Old
DECLARE  nTR CURSOR LOCAL FOR 
	SELECT
	s.name + '.' + o.name
	FROM private_affair.[sys].[objects] o
	join sys.schemas s on s.schema_id = o.schema_id
	WHERE [type]='TR'
	
DECLARE @NameTR VARCHAR(100)
	,@DDL VARCHAR(300)

OPEN nTR

FETCH NEXT FROM nTR INTO @NameTR
WHILE @@FETCH_STATUS=0
	begin
	SET @DDL = 'DROP TRIGGER ' + @NameTR
	EXEC (@DDL)
	FETCH NEXT FROM nTR INTO @NameTR
END


а вот как быть со вторым пунктом ....
или хотябы подскажите как их в цикле всех открыть а я уже руками сменю БД
спасибо ...
5 ноя 15, 15:35    [18374292]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Glory
Member

Откуда:
Сообщений: 104751
Восстановите Old на другом сервере. И получите скрипт всех триггеров.
5 ноя 15, 15:37    [18374314]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 415
Glory,

Другого нет. у меня на одном сервере 2 БД (рабочая с именениями и старя из которой хочу восстановить состояние всех триггеров). Хочу для всех триггеров на Old БД сгенерировать скрипт CREATE
5 ноя 15, 15:46    [18374377]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Glory
Member

Откуда:
Сообщений: 104751
Алексаша
Хочу для всех триггеров на Old БД сгенерировать скрипт CREATE

Если вы хотите делать это прямо из файла бэкапа, то вам придется написать свою утилиту.
Которая разберет бэкап и извлечет из него все нужные вам данные без восстановления.
5 ноя 15, 15:49    [18374391]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 415
Glory,

уточню. из бэкапа я создал новую БД с именем Old. Т.о. у меня зарегестрированы на сервере 2 БД. В ручную я могу открыть скрипт каждого триггера поменять USE и ALTER на CREATE. Подумал .... может можно хотя бы кодом все скрипты открыть.
5 ноя 15, 15:56    [18374437]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 415
Чтобы не залазить в каждую таблицу и смотреть есть там триггеры или нет
5 ноя 15, 15:56    [18374440]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
o-o
Guest
Алексаша
Чтобы не залазить в каждую таблицу и смотреть есть там триггеры или нет

select *, OBJECT_DEFINITION(object_id)
from sys.triggers
5 ноя 15, 16:17    [18374561]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
o-o
Алексаша
Чтобы не залазить в каждую таблицу и смотреть есть там триггеры или нет

select *, OBJECT_DEFINITION(object_id)
from sys.triggers

Я бы даже так предложил:

select Object_definition(o_s_t.object_id), * 
from	old.sys.triggers o_s_t
		left  join cur.sys.triggers c_s_t
				on o_s_t.object_id = c_s_t.object_id
where	c_s_t.object_id is null 
	 or c_s_t.modify_date > o_s_t.modify_date

Это если cur создавалась как копия old, естественно. Иначе надо по name триггера и name родительского объекта связывать.
5 ноя 15, 16:22    [18374595]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Как-то пугает изобилие триггеров. В любом случае, храните скрипты объектов базы в системе версионирования.
5 ноя 15, 17:11    [18374853]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Алексаша
Чтобы не залазить в каждую таблицу и смотреть есть там триггеры или нет


а сколько таблиц?
5 ноя 15, 17:30    [18374947]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 415
Winnipuh,

140
5 ноя 15, 17:59    [18375066]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
Алексаша
Member

Откуда: Левый берег
Сообщений: 415
Winnipuh
Алексаша
Чтобы не залазить в каждую таблицу и смотреть есть там триггеры или нет


а сколько таблиц?

Надо будет посмотреть что это ...
5 ноя 15, 18:01    [18375075]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
Алексаша,

по моему как-то просто это все вытаскивалось с помощью стандартных средств скриптования базы
потом в редакторе поском\заменой поправить чего надо и всего делов
5 ноя 15, 22:18    [18375846]     Ответить | Цитировать Сообщить модератору
 Re: Восстановить триггеры из backup  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31950
Алексаша
1. Удалить все триггеры в текущей версии
2. Открыть все триггеры из старой БД и создать в тек. версии

первое хочу сделать так
...
а вот как быть со вторым пунктом ....
Просто сделайте скрипт таблиц с триггерами в SSMS, правильно расставив опции.
Текст создания триггеров будет в конце файла - остальное, всё, что выше, сотрёте.
Далее, удаляете триггеры вашим скриптом, потом создаёте этим скриптом.
6 ноя 15, 08:46    [18376463]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить