Триггер по нескольким базам

Hawk
Дата: 09.12.2002 13:37:01
Как написать триггер, который удаляет строки в какой-нибудь таблице в другой базе.

Фишка в том, что имя второй базы заранее не известно. Оно указывается во время настройки системы и может быть в процессе как отключено, так и изменено. Но при этом желательно тело триггера не трогать.
Алексей К
Дата: 09.12.2002 13:49:32
Наличие БД можно проверять из системных таблиц БД master. А для удаления можно использовать динамический запрос, формируемый в зависимости от настроек...
jimmers
Дата: 09.12.2002 13:49:48
А в чем, собственно, проблема? ПишИте dynamic SQL.
Алиасов БД SQL Server 2000 не поддерживает.
jimmers
Дата: 09.12.2002 13:52:02
2Алексей К:

Наличие БД следует проверять не по системным таблицам, а по представлению INFORMATION_SCHEMA.SCHEMATA либо функции DB_ID(), наверное.
Hawk
Дата: 09.12.2002 13:59:07
Наверное, я некорректно объяснил.
Наличие-то базы на сервере - посмотреть не проблема.
Проблема использовать её в запросе.

Попробовал такое решение:

create trigger ...
...
-- Удаляем из другой базы

declare @Base varchar(255)
exec sp_GetInfoSTR '', 'paid_database', '', @Base output

set @Base = rtrim(ltrim(@Base))

if @Base != ''
begin
declare @Query nvarchar(255)
delete
set @Query = 'delete '+@Base+'.dbo.doc_ from '+@Base+'.dbo.doc_ d, deleted i where i.doc_id = d.doc_id'
exec sp_executesql @Query
if @@ERROR != 0
rollback transaction
end
...


Но ругнулся на таблицу deleted. С точки зрения сервака - ругань законная :).
максимум что пришло на ум: сформировать таблицу типа ##table, в нее загнать содержимое deleted, а затем это в качестве параматров передать в sp_executesql.
alexeyvg
Дата: 09.12.2002 14:02:04
[src]
create trigger ...
...
-- Удаляем из другой базы
declare @Base varchar(255)
exec sp_GetInfoSTR '', 'paid_database', '', @Base output

set @Base = rtrim(ltrim(@Base))

if @Base != ''
begin
declare @Query nvarchar(255)

SELECT *
INTO #DEL
FROM deleted

set @Query = 'delete '+@Base+'.dbo.doc_ from '+@Base+'.dbo.doc_ d, #DEL i where i.doc_id = d.doc_id'
exec sp_executesql @Query
if @@ERROR != 0
rollback transaction
end
...
[src]
Hawk
Дата: 09.12.2002 14:13:10
Спасибо, помогло.