powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Обновить данные в рамках триггера
6 сообщений из 6, страница 1 из 1
Обновить данные в рамках триггера
    #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
Обновить данные в рамках триггера
    #39924818
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. after-триггер срабатывает после операции, т.е. данные в таблице уже есть
2. в таблице inserted может быть как одна, так 0, так и много записей
3. rollback в after-триггере плохо, будет приводить к исключению. для контроля данных есть instead of триггеры, ибо зачем сначала делать модификацию данных, а потом откатывать, если можно было ее не делать?
...
Рейтинг: 0 / 0
Обновить данные в рамках триггера
    #39924856
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Saniacot
если поле fname NULL, то в поле lname вставлять, например, текст 'Тест'.


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

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

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


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