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

Откуда:
Сообщений: 18
Привет! Сабж.

Надо в одну таблицу сбрасывать ключи из нескольких других с указанием кода этой таблицы. А писать 20 слегка разных триггеров - не совсем приятная задача....
12 апр 04, 15:12    [624054]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Имя узнать можно. Только вот универсальный триггер - это использование динамического запроса. Вы уверены что он вам нужен в триггере ?
12 апр 04, 15:14    [624063]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
Valisy Ushakoff
Member

Откуда:
Сообщений: 18
To Glory:

Пока уверен. Ибо других вариантов не вижу.

Ну так как все-таки? :-)
12 апр 04, 15:18    [624074]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
Ибо других вариантов не вижу.


А я вижу.

автор
писать 20 слегка разных триггеров
12 апр 04, 15:21    [624088]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
Valisy Ushakoff
Member

Откуда:
Сообщений: 18
Эээээ.....

Боюсь показать невежливым....

Но я б не задавал вопросов, если б рассчитывал получить более-менее конкретный ответ.
12 апр 04, 15:26    [624106]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Дело ваше - вам же потом жить с этим триггером

use tempdb

go
if object_id('dbo.t') is not null drop table dbo.t
go
create table dbo.t(f1 int)
go
create trigger ti_i on dbo.t
for insert
as
select a.name as table_name, b.name as trigger_name,
OBJECTPROPERTY(@@procid, 'ExecIsDeleteTrigger') AS IsDeleteTrigger,
OBJECTPROPERTY(@@procid, 'ExecIsInsertTrigger') AS IsInsertTrigger,
OBJECTPROPERTY(@@procid, 'ExecIsUpdateTrigger') AS IsUpdateTrigger
from sysobjects a inner join sysobjects b on b.parent_obj = a.id
where b.id = @@procid
go
insert dbo.t values(1)
go
if object_id('dbo.t') is not null drop table dbo.t
go
12 апр 04, 15:30    [624123]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
Valisy Ushakoff
Member

Откуда:
Сообщений: 18
Thanks!

Про @@procid я, в общем то, и хотел узнать!

Постараюсь ужиться с этим кодом! :-)))
12 апр 04, 15:37    [624149]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
автор
Постараюсь ужиться с этим кодом! :-)))

ОФФ: ну до чего ж люди ленивые!!!
Ведь всё-равно будет код копировать в 20 своих триггеров...
12 апр 04, 15:39    [624159]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
Valisy Ushakoff
Member

Откуда:
Сообщений: 18
Все ж то Copy/Paste! :-))
12 апр 04, 16:19    [624276]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли способ в триггере узнать имя/ID таблицы, для которой он исполняется?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Как вариант:

CREATE TABLE [dbo].[TestTable] (

[col1] [char] (1) COLLATE Cyrillic_General_CI_AS NOT NULL
) ON [PRIMARY]
GO

CREATE TRIGGER it_TestTable ON [dbo].[TestTable]
FOR INSERT
AS
DECLARE @TableName sysname
SELECT @TableName = name FROM sysobjects
WHERE instrig = @@PROCID
PRINT @TableName
GO

INSERT INTO TestTable VALUES('A')
GO

DROP TABLE TestTable
GO
12 апр 04, 16:25    [624294]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить