Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с триггером Instead Of Insert / 11 сообщений из 11, страница 1 из 1
20.02.2018, 16:20
    #39604944
volt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
Добрый день!
есть представление, которое затрагивает две базы данных:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Create view АссортВсе with view_metadata as
SELECT 
  [Глоб-ПоизводствоSQL].dbo.Ассортимент.КодИздел, 
  [Глоб-ПоизводствоSQL].dbo.Ассортимент.Наимен, 
  [Глоб-ПоизводствоSQL].dbo.Ассортимент.Стар, 
  [ГлобSQL].dbo.АссортКонф.Цена, 
  [Глоб-ПоизводствоSQL].dbo.Ассортимент.Назначение, 
  [Глоб-ПоизводствоSQL].dbo.Ассортимент.ПРименяемость
FROM [Глоб-ПоизводствоSQL].dbo.Ассортимент LEFT JOIN [ГлобSQL].dbo.АссортКонф ON [Глоб-ПоизводствоSQL].dbo.Ассортимент.КодИздел = [ГлобSQL].dbo.АссортКонф.КодИздел



Для данного представления пишу следующий триггер:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
USE [ТехноSQL]
GO
/****** Object:  Trigger [dbo].[InsteadInsertTriggerAssortimentPoln1]    Script Date: 12.02.2018 10:48:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create TRIGGER [dbo].[InsteadInsertTriggerAssortVse] on [dbo].[АссортВсе]
INSTEAD OF INSERT
AS
BEGIN
  INSERT INTO [Глоб-ПоизводствоSQL].dbo.Ассортимент (наимен, Стар, Назначение, ПРименяемость)
       SELECT  Наимен, Стар, Назначение, ПРименяемость
	   from inserted 
  
  Insert into [ГлобSQL].dbo.АссортКонф(КодИздел, Цена)
       Select КодИздел, Цена
	   from inserted

END;



Проблема в том, что для таблицы [Глоб-поизводствоSQL].dbo.Ассортимент поле КодИздел является уникальным идентификатором, поэтому система его присваивает автоматически. А для таблицы [ГЛОБSQL].dbo.АссортКонф - Это просто поле и если его не задать - заполняется null.

Не могу понять, как правильно дополнить триггер, что бы так же и заполнялось поле КодИздел для таблицы АссортКонф.

Заранее спасибо
...
Рейтинг: 0 / 0
20.02.2018, 16:29
    #39604952
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
volt,
как-то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
	DECLARE @x1  TABLE  (Id int, code VARCHAR(1))

	INSERT INTO dbo.x1 (Code)
	OUTPUT 
		inserted.Id,
		inserted.Code
	   INTO @x1
	SELECT Code
	FROM inserted 
	
	INSERT INTO dbo.x2
	SELECT Id
	FROM @x1
...
Рейтинг: 0 / 0
20.02.2018, 16:59
    #39604970
volt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
TaPaK,

Написал триггер,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ALTER TRIGGER [dbo].[InsteadInsertTriggerAssortVse2] on [dbo].[АссортВсе]
INSTEAD OF INSERT
AS
BEGIN
  Declare @t table(КодИздел int, цена money)
  INSERT INTO [Глоб-ПоизводствоSQL].dbo.Ассортимент (наимен, Стар, Назначение, ПРименяемость)
    output inserted.КодИздел, inserted.цена into @t
       SELECT  Наимен, Стар, Назначение, ПРименяемость
	   from inserted ;
  
  Insert into [ГлобSQL].dbo.АссортКонф(КодИздел, Цена)
       Select КодИздел, цена from @t

END;



Выдает ошибку - invalid column name 'цена'. Я так понимаю, потому что в таблице Ассортимент отсутствует параметр цена.
...
Рейтинг: 0 / 0
20.02.2018, 17:09
    #39604978
volt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
TaPaK,

Поправил следующим триггером:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ALTER TRIGGER [dbo].[InsteadInsertTriggerAssortVse2] on [dbo].[АссортВсе]
INSTEAD OF INSERT
AS
BEGIN
  Declare @t table(КодИздел int)
  INSERT INTO [Глоб-ПоизводствоSQL].dbo.Ассортимент (наимен, Стар, Назначение, ПРименяемость)
    output inserted.КодИздел into @t
       SELECT  Наимен, Стар, Назначение, ПРименяемость
	   from inserted ;
  
  Insert into [ГлобSQL].dbo.АссортКонф (КодИздел, Цена) 
    Select qq.КодИздел, цена from @t as qq, inserted


Select qq.КодИздел, цена from @t as qq, inserted
END;



Вроде работает, осталось только проверить, что будет если добавлять одним запросом несколько строк
...
Рейтинг: 0 / 0
20.02.2018, 17:13
    #39604985
Проблема с триггером Instead Of Insert
volt,

Охренительный CROSS JOIN чудесным образом оттеняет общий трупный аромат этого ужаса легкими нотками запекшейся крови из простреленной ноги.
...
Рейтинг: 0 / 0
20.02.2018, 17:16
    #39604991
volt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
Поправил следующим тригг,

Я уже обнаружил, что это неправильно...
...
Рейтинг: 0 / 0
20.02.2018, 17:42
    #39605013
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
volt,

ну что бы связать ваше цену с ИД, да ещё и из представления, я могу придумать только вариант с MERGE вместо insert

и да, я считаю это всё полным извращением :)
...
Рейтинг: 0 / 0
20.02.2018, 18:18
    #39605046
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
TaPaK,

MERGE вполне себе способ.
А вот полное извращение - это создать для Ассортимент представление с фейковым столбцом цена и триггером instead of insert.
...
Рейтинг: 0 / 0
21.02.2018, 10:24
    #39605310
volt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
invm,

К сожалению, проблема глубже... Есть бд написанная на Access. ЕЕ надо перевести на SQL самым простым способом.. Поэтому особенно лезть в логику БД нет желания, и приходится строить костыли.
...
Рейтинг: 0 / 0
21.02.2018, 12:24
    #39605415
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
voltЕсть бд написанная на Access. надо перевести на SQLперевести ради перевести или чтоб потом работало нормально?
...
Рейтинг: 0 / 0
21.02.2018, 13:59
    #39605518
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с триггером Instead Of Insert
Дедушка,

утілізація Access пріложеній - это отдельное конг-фу, которое корміт меня уже не первый год. І почті всё там завісіт от угла крівізны рук ісходного кода. Но перепісывать формляр вставкі через instead of тріггер мне бы не прішло в голову... Да і вообсче, трігеров в Аксе нет, нафіга іх плодіть?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с триггером Instead Of Insert / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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