Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Пример:
MS SQL 2005. Две таблицы table1 и table2. Таблица table1 имеет связь "сама на себя", таблица table2 - на таблицу table1 с каскадным удалением и обновлением.
Скрипт:
CREATE TABLE dbo.table1
	(
		id int NOT NULL,
		parent int NULL,
		atr nchar(10) NULL
	)
GO
ALTER TABLE dbo.table1 ADD CONSTRAINT
	PK_table1 PRIMARY KEY CLUSTERED (id)

GO
ALTER TABLE dbo.table1 
ADD CONSTRAINT FK_table1_table1 
FOREIGN KEY(parent) 
REFERENCES dbo.table1(id) 
	ON UPDATE  NO ACTION 
	ON DELETE  NO ACTION 
GO

CREATE TABLE dbo.table2
	(
		id int NOT NULL,
		fk_id_table1 int NOT NULL,
		atr nchar(10) NULL
	)
GO
ALTER TABLE dbo.table2 
	ADD CONSTRAINT PK_table2 
	PRIMARY KEY CLUSTERED (id)

GO
ALTER TABLE dbo.table2 
ADD CONSTRAINT FK_table2_table1 
FOREIGN KEY (fk_id_table1) 
REFERENCES dbo.table1 (id) 
	ON UPDATE  CASCADE 
	ON DELETE  CASCADE 	
GO
Необходимо:
при удалении записей из таблицы table1 удалить связанные записи из той же таблицы.
Примечание:
Каскадное удаление по связи "сама на себя" не поддерживается для таблицы table1, триггер INSTEAD OF DELETE для таблицы table1 не создается.
25 янв 06, 18:22    [2287612]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ну раз триггер не создается то пишите процедуру
25 янв 06, 18:36    [2287652]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1867
Вы хотите удалить всех потомков до 7 колена?
Нужна рекурсивная процедура, обходящая дерево, исходящее из удаляемой записи, в концевом порядке (сначала сыновья, потом отец).
Процедуру вызвать в триггере. Кажется, сработает.
Вот пример - классификация товаров:
CREATE PROCEDURE dbo.DeleteTovar @Tov_ID int 
as return 
declare @IsTovar bit, @Tovar_ID int
-- выясним, является ли @Tov_ID товаром или уровнем классификации
select @IsTovar=IsTovar from Tovar where Tovar_ID=@Tov_ID
-- если это товар, удалим его и упоминание его в PriceList и SostNakl
if @IsTovar=1 begin
  delete from PriceList where Tovar_ID=@Tov_ID
  delete from SostNakl where Tovar_ID=@Tov_ID
end else begin 
  -- это не товар, а уровень классификации
  -- пройдем по всем его сыновьям в дереве классификации
  declare dt cursor dynamic local forward_only
    for select Tovar_ID from Tovar where Parent_ID=@Tov_ID
  open dt
  fetch next from dt into @Tovar_ID
  while @@fetch_status=0 begin 
    -- потомков обрабатываем точно также
    exec dbo.DeleteTovar @Tovar_ID  
    fetch next from dt into @Tovar_ID
  end
  close dt
  deallocate dt
end
delete from Tovar where Tovar_ID=@Tov_ID
GO
Единственно, что мешает - ограниченная глубина рекурсии (вроде 32)
25 янв 06, 18:50    [2287701]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Glory
Ну раз триггер не создается то пишите процедуру

Необходимо, что бы удаление происходило инвариантно от способа удаления и, желательно, без вызова дополнительных процедур. Есть вариант установить DELETE CASCADE и UPDATE CASCADE в DELETE NO ACTION и UPDATE NO ACTION для свойства связи таблиц table2 и table1 и написать INSTEAD OF DELETE триггер для таблицы table1, реализующего одновременное удаление связанных записей из обеих таблиц, но это возможно только в данном примере.
25 янв 06, 18:51    [2287704]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
muk07
Вы хотите удалить всех потомков до 7 колена?
Нужна рекурсивная процедура, обходящая дерево, исходящее из удаляемой записи, в концевом порядке (сначала сыновья, потом отец).
Процедуру вызвать в триггере. Кажется, сработает.
Вот пример - классификация товаров:
CREATE PROCEDURE dbo.DeleteTovar @Tov_ID int 
as return 
declare @IsTovar bit, @Tovar_ID int
-- выясним, является ли @Tov_ID товаром или уровнем классификации
select @IsTovar=IsTovar from Tovar where Tovar_ID=@Tov_ID
-- если это товар, удалим его и упоминание его в PriceList и SostNakl
if @IsTovar=1 begin
  delete from PriceList where Tovar_ID=@Tov_ID
  delete from SostNakl where Tovar_ID=@Tov_ID
end else begin 
  -- это не товар, а уровень классификации
  -- пройдем по всем его сыновьям в дереве классификации
  declare dt cursor dynamic local forward_only
    for select Tovar_ID from Tovar where Parent_ID=@Tov_ID
  open dt
  fetch next from dt into @Tovar_ID
  while @@fetch_status=0 begin 
    -- потомков обрабатываем точно также
    exec dbo.DeleteTovar @Tovar_ID  
    fetch next from dt into @Tovar_ID
  end
  close dt
  deallocate dt
end
delete from Tovar where Tovar_ID=@Tov_ID
GO
Единственно, что мешает - ограниченная глубина рекурсии (вроде 32)

Не сработает. INSTEAD OF DELETE триггер создать нельзя из за связи таблиц table1 и table2, вернее из за каскадного удаления, а до FOR DELETE дело не доходит, выходит сообщение об ошибке...
25 янв 06, 18:54    [2287712]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
alr
Member

Откуда:
Сообщений: 51
Сделайте вьюху и триггер на нее
25 янв 06, 22:10    [2288080]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuestGuestGuest
Не сработает. INSTEAD OF DELETE триггер создать нельзя из за связи таблиц table1 и table2, вернее из за каскадного удаления, а до FOR DELETE дело не доходит, выходит сообщение об ошибке...

Как как извините ? Нельзя создать триггер "из за связи таблиц" ?
26 янв 06, 02:10    [2288355]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1867
GuestGuestGuest
Не сработает. INSTEAD OF DELETE триггер создать нельзя из за связи таблиц table1 и table2, вернее из за каскадного удаления, а до FOR DELETE дело не доходит, выходит сообщение об ошибке...

А я и не предлагаю INSTEAD OF DELETE. Обычный триггер.
26 янв 06, 06:55    [2288443]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Прошу прощения, был приведен некорректный скрипт создания таблиц. Исправляюсь, заодно привожу пример, более близкий к реальной задаче.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table0]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[table0](
	[id] [int] NOT NULL,
	[atr] [nchar](10) NULL,
 CONSTRAINT [PK_table0] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table3]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[table3](
	[id] [int] NOT NULL,
	[fk_table0] [int] NOT NULL,
	[fk_table2] [int] NULL,
	[parent] [int] NULL,
	[atr] [nchar](10) NULL,
 CONSTRAINT [PK_table3] PRIMARY KEY CLUSTERED 
(
	[id] ASC,
	[fk_table0] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table4]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[table4](
	[id] [int] NOT NULL,
	[fk_table0] [int] NOT NULL,
	[fk_table3] [int] NOT NULL,
	[atr] [nchar](10) NULL,
 CONSTRAINT [PK_table4] PRIMARY KEY CLUSTERED 
(
	[id] ASC,
	[fk_table0] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table1]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[table1](
	[id] [int] NOT NULL,
	[fk_table0] [int] NOT NULL,
	[atr] [nchar](10) NULL,
 CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED 
(
	[id] ASC,
	[fk_table0] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[table2]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[table2](
	[id] [int] NOT NULL,
	[fk_table0] [int] NOT NULL,
	[fk_table1] [int] NULL,
	[atr] [nchar](10) NULL,
 CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED 
(
	[id] ASC,
	[fk_table0] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_table3_table2]') AND parent_object_id = OBJECT_ID(N'[dbo].[table3]'))
ALTER TABLE [dbo].[table3]  WITH CHECK ADD  CONSTRAINT [FK_table3_table2] FOREIGN KEY([id], [fk_table0])
REFERENCES [dbo].[table2] ([id], [fk_table0])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_table3_table3]') AND parent_object_id = OBJECT_ID(N'[dbo].[table3]'))
ALTER TABLE [dbo].[table3]  WITH CHECK ADD  CONSTRAINT [FK_table3_table3] FOREIGN KEY([parent], [fk_table0])
REFERENCES [dbo].[table3] ([id], [fk_table0])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_table4_table3]') AND parent_object_id = OBJECT_ID(N'[dbo].[table4]'))
ALTER TABLE [dbo].[table4]  WITH CHECK ADD  CONSTRAINT [FK_table4_table3] FOREIGN KEY([fk_table3], [fk_table0])
REFERENCES [dbo].[table3] ([id], [fk_table0])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_table1_table0]') AND parent_object_id = OBJECT_ID(N'[dbo].[table1]'))
ALTER TABLE [dbo].[table1]  WITH CHECK ADD  CONSTRAINT [FK_table1_table0] FOREIGN KEY([fk_table0])
REFERENCES [dbo].[table0] ([id])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_table2_table1]') AND parent_object_id = OBJECT_ID(N'[dbo].[table2]'))
ALTER TABLE [dbo].[table2]  WITH CHECK ADD  CONSTRAINT [FK_table2_table1] FOREIGN KEY([id], [fk_table0])
REFERENCES [dbo].[table1] ([id], [fk_table0])
ON UPDATE CASCADE
ON DELETE CASCADE
Дано: пять таблиц - table0, table1, table2, table3, table4. Имеются связи: table0 - table1, table1 - table2, table2 - table3, table3 - table4. Все связи, кроме table0 - table1, имеют опции ON DELETE CASCADE/ON UPDATE CASCADE. Кроме этого имеется связь table3 - table3.
Необходимо инвариантно каскадно удалять подчиненные записи.
26 янв 06, 09:01    [2288614]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuestGuestGuest

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

Ну так если вам удалось создать FK c DELETE CASCADE/ON UPDATE CASCADE, то сервер будет делать это автоматически. В чем проблема то ?
26 янв 06, 10:17    [2288900]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Glory
GuestGuestGuest

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

Ну так если вам удалось создать FK c DELETE CASCADE/ON UPDATE CASCADE, то сервер будет делать это автоматически. В чем проблема то ?

Связь table3 - table3 с каскадным удалением не создается. Это проблема всех MS SQL серверов... INSTEAD OF DELETE триггер тоже не создается, мешает связь с каскадным удалением table2 - table3. Если уберем каскадное удаление в связи table2 - table3 и начнем писать триггер INSTEAD OF DELETE на таблицу table3, то для каскадного удаления записей из таблицы table3 при удалении записей из таблицы table2 или table1, надо писать триггер INSTEAD OF DELETE для таблицы table2. Но триггер INSTEAD OF DELETE для таблицы table2 мешает создать уже каскадное удаление в связи table1 - table2, и так далее.
26 янв 06, 10:34    [2288995]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Тогда делайте ВСЕ каскадные операции через триггера.
26 янв 06, 10:43    [2289052]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Glory
Тогда делайте ВСЕ каскадные операции через триггера.

Тогда, как минимум, придется установить опцию БД RECURSIVE_TRIGGERS в ON (включить рекурсивные триггеры). Нет противопоказаний?
26 янв 06, 10:50    [2289101]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuestGuestGuest
Glory
Тогда делайте ВСЕ каскадные операции через триггера.

Тогда, как минимум, придется установить опцию БД RECURSIVE_TRIGGERS в ON (включить рекурсивные триггеры). Нет противопоказаний?

- Ну триггера нужно писать с учетом всех возможных установок базы.
- Для работы с деревом рекурсия вовсе необязательна
26 янв 06, 10:56    [2289132]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Glory

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

В установках БД опция RECURSIVE_TRIGGERS стоит в OFF. Менять ее возможно только в том случае, если другие варианты уже исчерпаны...
26 янв 06, 11:00    [2289159]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

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

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

В установках БД опция RECURSIVE_TRIGGERS стоит в OFF. Менять ее возможно только в том случае, если другие варианты уже исчерпаны...

Для работы с деревом рекурсия вовсе необязательна
26 янв 06, 11:01    [2289164]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Glory
Для работы с деревом рекурсия вовсе необязательна

Это понятно.
INSTEAD OF DELETE триггера будут срабатывать рекурсивно для таблиц table1, table2, table3 при любой установке опции RECURSIVE_TRIGGERS?
26 янв 06, 11:05    [2289191]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuestGuestGuest
Glory
Для работы с деревом рекурсия вовсе необязательна

Это понятно.
INSTEAD OF DELETE триггера будут срабатывать рекурсивно для таблиц table1, table2, table3 при любой установке опции RECURSIVE_TRIGGERS?

INSTEAD триггер невозможно выполнить рекурсивно. Он всегда выполняется строго один раз
26 янв 06, 11:07    [2289210]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
По-моему, в MS SQL Server 2005 такая задача решается просто. Вот скрипт, который создаёт самосвязанную таблицу T1 и таблицу T2, ссылающуюся на T1 с каскадным удалением. Таблицы заполняются таким образом, что в T1 хранится дерево с четырьмя уровнями и корневым узлом ID=1.

CREATE TABLE T1(ID INT NOT NULL, IDParent INT NULL, CONSTRAINT pkT1 PRIMARY KEY(ID), CONSTRAINT fkT1T1 FOREIGN KEY(IDParent) REFERENCES T1)
GO
CREATE TABLE T2(ID INT NOT NULL, IDT1 INT NULL, CONSTRAINT pkT2 PRIMARY KEY(ID), CONSTRAINT fkT2T1 FOREIGN KEY(IDT1) REFERENCES T1 ON DELETE CASCADE)
GO
INSERT T1 (ID,IDParent) VALUES(1,NULL)
INSERT T1 (ID,IDParent) VALUES(2,NULL)
INSERT T1 (ID,IDParent) VALUES(3,1)
INSERT T1 (ID,IDParent) VALUES(4,1)
INSERT T1 (ID,IDParent) VALUES(5,1)
INSERT T1 (ID,IDParent) VALUES(6,4)
INSERT T1 (ID,IDParent) VALUES(7,4)
INSERT T1 (ID,IDParent) VALUES(8,2)
INSERT T1 (ID,IDParent) VALUES(9,6)
INSERT T1 (ID,IDParent) VALUES(10,6)
INSERT T2 (ID,IDT1) VALUES(1,1)
INSERT T2 (ID,IDT1) VALUES(2,2)
GO

WITH T(ID,IDParent) AS
(
SELECT T1.ID,T1.IDParent FROM T1 WHERE T1.ID=1
UNION ALL
SELECT T1.ID, T1.IDParent FROM T1 JOIN T ON T.ID=T1.IDParent
)
DELETE T1 FROM T WHERE T1.ID=T.ID
GO

SELECT * FROM T1
SELECT * FROM T2

Кажется, всё удалилось как надо...
26 янв 06, 11:56    [2289535]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Glory
GuestGuestGuest
Glory
Для работы с деревом рекурсия вовсе необязательна

Это понятно.
INSTEAD OF DELETE триггера будут срабатывать рекурсивно для таблиц table1, table2, table3 при любой установке опции RECURSIVE_TRIGGERS?

INSTEAD триггер невозможно выполнить рекурсивно. Он всегда выполняется строго один раз

В таблице table1 есть INSTEAD OF DELETE триггер, удаляющий записи из таблицы table2, в которой, в свою очередь, есть INSTEAD OF DELETE триггер, удаляющий записи из таблицы table3. При удалении записи из таблицы table1 INSTEAD OF DELETE триггер в таблице table2 не выполнится при любой установке опции RECURSIVE_TRIGGERS? Или фраза "INSTEAD триггер невозможно выполнить рекурсивно. Он всегда выполняется строго один раз" относится к одной таблице?
26 янв 06, 12:08    [2289606]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Кроме INSTEAD есть еще и AFTER, которые и будут работать рекурсивно, если включите.
26 янв 06, 12:10    [2289617]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
Рекурсия - это вызов одного и того же триггера.
А то, про что говорите вы, есть просто вложенный вызов триггеров
26 янв 06, 12:10    [2289621]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
GuestGuestGuest
Guest
Гавриленко Сергей Алексеевич
Кроме INSTEAD есть еще и AFTER, которые и будут работать рекурсивно, если включите.

А до AFTER триггера дело дойдет, если надо удалить записи каскадно из нескольких таблиц? В какой момент при удалении записи будет происходить проверка ограничения внешнего ключа: до срабатывания AFTER триггера или после?
26 янв 06, 12:24    [2289705]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Glory
Member

Откуда:
Сообщений: 104751
GuestGuestGuest
Гавриленко Сергей Алексеевич
Кроме INSTEAD есть еще и AFTER, которые и будут работать рекурсивно, если включите.

А до AFTER триггера дело дойдет, если надо удалить записи каскадно из нескольких таблиц? В какой момент при удалении записи будет происходить проверка ограничения внешнего ключа: до срабатывания AFTER триггера или после?

Откройте в BOL статью Cascading Referential Integrity Constraints и узнайте сами
26 янв 06, 12:27    [2289733]     Ответить | Цитировать Сообщить модератору
 Re: Удалить подчиненные записи в той же таблице  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
GuestGuestGuest
Гавриленко Сергей Алексеевич
Кроме INSTEAD есть еще и AFTER, которые и будут работать рекурсивно, если включите.

А до AFTER триггера дело дойдет, если надо удалить записи каскадно из нескольких таблиц? В какой момент при удалении записи будет происходить проверка ограничения внешнего ключа: до срабатывания AFTER триггера или после?

Сказали же - или ключи с каскадами или триггера. Среднего варианта нет.
26 янв 06, 12:27    [2289736]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить