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

Откуда:
Сообщений: 39
Есть таблица, допустим t1 (id int, fname nvarchar(256), lname nvarchar(256))
Мне нужно, чтобы после вставки записей в таблицу проверялось, что если поле fname NULL, то в поле lname вставлять, например, текст 'Тест'. Подскажите, пожалуйста, как правильно это реализовать?

Как я понимаю данные в таблицу ещё физически не занесены, поэтому сделать так я не могу:
update t1
set lname = 'Тест'
where id in (select id from inserted)

Код:
USE [MyDB]
GO


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE trigger [dbo].[MyTrigger] on [dbo].[t1] after INSERT 
as

BEGIN
	if (select fname from inserted) is not null --если поле незаполнено, то ничего не делаем (откатываемся)
		begin
			return --Rollback transaction? 
		end
        --Вставляем в поле lname значение "Тест"
end
GO

ALTER TABLE [dbo].[t1] ENABLE TRIGGER [MyTrigger]
GO


Спасибо!

Сообщение было отредактировано: 10 фев 20, 17:57
10 фев 20, 17:57    [22077039]     Ответить | Цитировать Сообщить модератору
 Re: Обновить данные в рамках триггера  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36633
1. after-триггер срабатывает после операции, т.е. данные в таблице уже есть
2. в таблице inserted может быть как одна, так 0, так и много записей
3. rollback в after-триггере плохо, будет приводить к исключению. для контроля данных есть instead of триггеры, ибо зачем сначала делать модификацию данных, а потом откатывать, если можно было ее не делать?

Сообщение было отредактировано: 10 фев 20, 18:04
10 фев 20, 18:05    [22077048]     Ответить | Цитировать Сообщить модератору
 Re: Обновить данные в рамках триггера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4288
Saniacot
если поле fname NULL, то в поле lname вставлять, например, текст 'Тест'.


а констрейнт DEFAULT ('Тест') вас не устроит
10 фев 20, 18:45    [22077090]     Ответить | Цитировать Сообщить модератору
 Re: Обновить данные в рамках триггера  [new]
Владислав Колосов
Member

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

поля разные, не поможет.
10 фев 20, 19:03    [22077118]     Ответить | Цитировать Сообщить модератору
 Re: Обновить данные в рамках триггера  [new]
iap
Member

Откуда: Москва
Сообщений: 46941
В INSERTе надо вставлять сразу правильное значение lname:
CASE WHEN fname IS NULL THEN 'test' ELSE <lname_value> END
И триггер не нужен!

Сообщение было отредактировано: 10 фев 20, 19:47
10 фев 20, 19:47    [22077149]     Ответить | Цитировать Сообщить модератору
 Re: Обновить данные в рамках триггера  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2357
(написал не правильный код)

Сообщение было отредактировано: 11 фев 20, 10:51
11 фев 20, 10:50    [22077417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить