Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновить данные в рамках триггера / 6 сообщений из 6, страница 1 из 1
10.02.2020, 17:57
    #39924810
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить данные в рамках триггера
Есть таблица, допустим t1 (id int, fname nvarchar(256), lname nvarchar(256))
Мне нужно, чтобы после вставки записей в таблицу проверялось, что если поле fname NULL, то в поле lname вставлять, например, текст 'Тест'. Подскажите, пожалуйста, как правильно это реализовать?

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

Код:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
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



Спасибо!
...
Рейтинг: 0 / 0
10.02.2020, 18:05
    #39924818
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить данные в рамках триггера
1. after-триггер срабатывает после операции, т.е. данные в таблице уже есть
2. в таблице inserted может быть как одна, так 0, так и много записей
3. rollback в after-триггере плохо, будет приводить к исключению. для контроля данных есть instead of триггеры, ибо зачем сначала делать модификацию данных, а потом откатывать, если можно было ее не делать?
...
Рейтинг: 0 / 0
10.02.2020, 18:45
    #39924856
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить данные в рамках триггера
Saniacot
если поле fname NULL, то в поле lname вставлять, например, текст 'Тест'.


а констрейнт DEFAULT ('Тест') вас не устроит
...
Рейтинг: 0 / 0
10.02.2020, 19:03
    #39924883
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить данные в рамках триггера
a_voronin,

поля разные, не поможет.
...
Рейтинг: 0 / 0
10.02.2020, 19:47
    #39924909
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить данные в рамках триггера
В INSERTе надо вставлять сразу правильное значение lname:
Код: sql
1.
CASE WHEN fname IS NULL THEN 'test' ELSE <lname_value> END

И триггер не нужен!
...
Рейтинг: 0 / 0
11.02.2020, 10:50
    #39925074
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновить данные в рамках триггера
(написал не правильный код)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновить данные в рамках триггера / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]