С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171

Триггер с SCOPE_IDENTITY()

20.02.2021, 19:05. Показов 3131. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, вспоминаю как написать триггер с SCOPE_IDENTITY(), для вставки в две таблицы, но не помню как правильно поступить с @Newid, куда правильно его поставить, пока написал вот такой чудо-запрос:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TRIGGER Manager
  ON EmployeeINFO --VIEW
  INSTEAD OF INSERT AS
  BEGIN 
     DECLARE @Newid INT 
     SET @Newid = SCOPE_IDENTITY() 
    declare @Table table (Name nvarchar(15), Post nvarchar(25),
                      BirthDate date, [Address] nvarchar(50),Phone char(12));
     merge into Employees 
    using inserted s on 1 = 0
      when not matched then
      insert
      ( Name,Post,Salary) 
       values
      (s.Name,s.Post,s.Salary,)       
       output
        s.BirthDate, s.[Address],s.Phone into @Table ( BirthDate,[Address],Phone); 
      insert into dbo.EmployeesInfo 
      (ID, BirthDate,[Address],Phone)
     select
      @Newid, BirthDate,[Address],Phone       
       from @Table;              
       END
И получаю вот такое:
Не удалось вставить значение NULL в столбец "ID", таблицы "Base5.dbo.EmployeesInfo"; в столбце запрещены значения NULL. Ошибка в INSERT.
Где тут нужно поправить ?

Добавлено через 8 минут
Вот вставка:
T-SQL
1
2
 INSERT INTO  EmployeeINFO (Name,Post,Salary,BirthDate,Address,Phone) VALUES ( 'Хрюша',
    'Генеральный поросёнок',90000,'2009-12-01', 'Помидоркина 9', '(031)3219821')
Добавлено через 21 минуту
Урезал немного.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2021, 19:05
Ответы с готовыми решениями:

SCOPE_IDENTITY(),@@IDENTITY
Доброго времени суток, есть проблема автоматической вставки PK_ID из столбца А в FK_ID столбца Б как это можно провернуть со...

Использование insert и scope_identity внутри update
Есть две таблицы: tbl1 и tbl2. Необходимо в первой создать новую строку, а ID новой строки записать в одно из полей второй таблицы. ...

Почему IDENT_CURRENT, SCOPE_IDENTITY и @@IDENTITY возвращают NULL ?
Insert выполняется нормально. INSERT INTO property VALUES (12,1,4,12345,getdate(), 'true'); SELECT IDENT_CURRENT...

21
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
20.02.2021, 22:34
Так?
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TRIGGER Manager
ON EmployeeINFO --VIEW
INSTEAD OF INSERT AS
BEGIN 
 merge into Employees 
 using inserted s on 1 = 0
 when not matched then
  insert
   ( Name,Post,Salary) 
  values
   (s.Name,s.Post,s.Salary)       
  output
   inserted.ID, s.BirthDate, s.[Address],s.Phone into dbo.EmployeesInfo (ID, BirthDate,[Address],Phone); 
END
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
20.02.2021, 22:49  [ТС]
Не нравится ему моё представление:
Целью "dbo.EmployeeInfo" предложения OUTPUT INTO не может быть представление или обобщенное табличное выражение.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
20.02.2021, 23:08
Так что пытаетесь получить добавляя данные в представление в триггере на это же представление?
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
21.02.2021, 18:11  [ТС]
Ага, представление и таблица отличаются всего на одну буковку "s", не заметил)

Далее пришлось снять ограничения внутри таблички EmployeesInfo, поскольку получал вот это:

Целевая таблица "dbo.EmployeesInfo" предложения OUTPUT INTO не может иметь какие-либо активные проверочные ограничения или правила. Обнаружено проверочное ограничение или правило "CK__Employees__Birth__3F115E1A".

Но это ладно, а вот как быть с ограничением по ключу, между таблицами Employees и EmployeesInfo:

Целевая таблица "dbo.EmployeesInfo" предложения OUTPUT INTO не может находиться ни с одной стороны связи (первичный ключ, внешний ключ). Обнаружено ссылочное ограничение "FK__EmployeesInf__ID__2B3F6F97".

Я же не могу связь удалить. Как это победить ?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
21.02.2021, 18:31
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Как это победить ?
Тогда через промежуточную таблицу, как и было первоначально. Только добавить в нее ID.
Тогда и все ограничения можно будет сохранить.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
21.02.2021, 18:46  [ТС]
Тогда я получу вот это:

Невозможно вставить явное значение для столбца идентификаторов в таблице "Employees", когда параметр IDENTITY_INSERT имеет значение OFF.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
21.02.2021, 18:50
DDL таблиц и представления покажите.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
21.02.2021, 21:07  [ТС]
Вот это?

Кликните здесь для просмотра всего текста
T-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
25
26
27
28
29
30
31
32
33
34
35
36
 CREATE TABLE Employees
 (ID int not null IDENTITY,
 Name nvarchar(15)not null ,
 Post nvarchar(25)not null,
 Salary decimal(18,2) not null)
 GO
 
 CREATE TABLE EmployeesInfo
 (ID int Not NULL ,
 BirthDate Date not null,
 [Address] nvarchar(50)not null,
 Phone char(12) Not Null)
 GO
 
 
ALTER TABLE Employees 
ADD
PRIMARY KEY(ID)
GO
 
ALTER TABLE EmployeesInfo 
ADD
UNIQUE(ID)
GO
 
ALTER TABLE EmployeesInfo 
ADD
FOREIGN KEY (ID) REFERENCES Employees(ID)
ON DELETE CASCADE
GO
 
ALTER TABLE Orders
ADD
FOREIGN KEY(EmployeeID) REFERENCES Employees(ID)
ON DELETE SET NULL
GO


Добавлено через 6 минут
Представление забыл:

T-SQL
1
2
3
4
 CREATE VIEW EmployeeINFO AS
  SELECT e.ID, Name  ,post, Salary,BirthDate, ei.[Address], Phone FROM  Employees E
  JOIN EmployeesInfo ei
  ON ei.ID=e.ID
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
21.02.2021, 21:13
DDL таблиц и представления покажите.
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Вот это?
Это
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Невозможно вставить явное значение для столбца идентификаторов в таблице "Employees"
Не получите. Employees.ID отсутствует в перечне столбцов для insert
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
21.02.2021, 21:42  [ТС]
В триггере ? Я добавил туда ID, не помогло.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
21.02.2021, 22:08
Куда добавили?

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE TRIGGER Manager
ON EmployeeINFO --VIEW
INSTEAD OF INSERT AS
BEGIN 
 declare @ei table (ID int, BirthDate date, [Address] nvarchar(50), Phone char(12));
 
 insert into dbo.Employees 
  (Name, Post, Salary)
  output
   inserted.ID, inserted.BirthDate, inserted.[Address], inserted.Phone into @ei (ID, BirthDate,[Address],Phone)
  select
   Name, Post, Salary
  from
   inserted;
 
 insert into dbo.EmployeesInfo
  (ID, BirthDate, [Address], Phone)
  select
   ID, BirthDate, [Address], Phone
  from
   @ei;
END
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
21.02.2021, 22:17  [ТС]
Вот сюда:

T-SQL
1
2
3
4
5
6
7
8
  insert into dbo.Employees 
  (ID,Name, Post, Salary)
  output
   inserted.ID, inserted.BirthDate, inserted.[Address], inserted.Phone into @ei (ID, BirthDate,[Address],Phone)
  select
   ID, Name, Post, Salary
  from
   inserted;
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
22.02.2021, 09:36
Цитата Сообщение от 7-2-3 Посмотреть сообщение
Вот сюда
T-SQL
1
2
3
4
5
6
7
8
  insert into dbo.Employees 
  (ID,Name, Post, Salary)
  output
   inserted.ID, inserted.BirthDate, inserted.[Address], inserted.Phone into @ei (ID, BirthDate,[Address],Phone)
  select
   ID, Name, Post, Salary
  from
   inserted;
Вам был дан правильный код, но Вы зачем-то решили его "улучшить" и добавили ID туда, где его быть не должно, от слова "совсем" и теперь жалуетесь, что не работает.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
22.02.2021, 10:10  [ТС]
Я запутался(
В таком виде inserted пытается вставить данные из таблицы Employees, которой ничего не известно про поля "BirthDate", "[Address]", "Phone".
Миниатюры
Триггер с SCOPE_IDENTITY()  
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
22.02.2021, 10:18
7-2-3, в данном триггере в inserted содержатся столбцы из представления, а не из таблиц.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
22.02.2021, 11:24  [ТС]
Всё равно не понял, там же именно столбцы из таблицы Empoyees, ткните носом куда нужно посмотреть ?
Изображения
 
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
22.02.2021, 12:05
7-2-3, закомментируйте весь код внутри триггера. Вместо него добавьте select * from inserted и посмотрите на результат.
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
22.02.2021, 12:19  [ТС]
Вот так?
Миниатюры
Триггер с SCOPE_IDENTITY()  
0
54 / 6 / 5
Регистрация: 24.01.2019
Сообщений: 171
22.02.2021, 12:23  [ТС]
А какой вывод?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.02.2021, 12:23
Помогаю со студенческими работами здесь

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это предприятие с именем таблицы База практик в...

Триггер для добавления к строке название таблицы, в которой содержится триггер
Есть таблицы База_Практик. В неё добавляю предприятие, и автоматически нужно добавить это предприятие с именем таблицы База практик в...

Триггер, вызывающий процедуру, в которой выполняется select к этой таблице (откуда был вызван триггер)
есть тригерр create or replace trigger quickstart.quickstart.ACRIONS_COMMIT_TR after update on quickstart.actions for each...

Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать счетчик ч
Разработать триггер, запускаемый при занесении новой строки в таблицу. Триггер должен увеличивать счетчик числа добавленных строк.

Т-Триггер на ИЛИ-НЕ элементах и что это за триггер?
Здравствуйте. Нужно построить схему Т-Триггера через ИЛИ-НЕ элементы. Вот сам триггер ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru