powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер Instead Of Insert
22 сообщений из 22, страница 1 из 1
Триггер Instead Of Insert
    #39637536
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день!

У меня возникла проблема в написании триггера Instead Of Insert - Упрощенно задача выглядит следующим образом:
Есть две таблицы:
Table1:
Id : (int, not null, identity, PK)
Name : Varchar(50), null

Table2:
Id : (Int, not null, PK) - FK_Table1_Id
Count: (Int, null)

Для этих таблиц создано представление:
create view dbo.[View1]
as
Select table1.id, name, count from Table1, Table2
GO

необходимо написать триггер, который будет заносить записи в таблицы Table1, table2. Основная проблема в том, что поле Table1.Id - Identity, заполняется автоматически. и в таблице inserted поле не заполнено.

Как правильно написать триггер.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637542
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voltдобрый день!

У меня возникла проблема в написании триггера Instead Of Insert - Упрощенно задача выглядит следующим образом:
Есть две таблицы:
Table1:
Id : (int, not null, identity, PK)
Name : Varchar(50), null

Table2:
Id : (Int, not null, PK) - FK_Table1_Id
Count: (Int, null)

Для этих таблиц создано представление:
create view dbo.[View1]
as
Select table1.id, name, count from Table1, Table2
GO

необходимо написать триггер, который будет заносить записи в таблицы Table1, table2. Основная проблема в том, что поле Table1.Id - Identity, заполняется автоматически. и в таблице inserted поле не заполнено.

Как правильно написать триггер.Для начала правильно напишите SELECT для view.
Сейчас там у вас декартово произведение таблиц.

Если поле в одной таблице является и PK, и FK на другую таблицу,
то логичнее иметь одну таблицу. Ибо это отношение 1:1.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637544
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volt,

и завязывайте с запятыми во FROMе
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637546
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voltSelect table1.id, name, count from Table1, Table2

выполнить то пробовали? ничего странного не заметили?
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637554
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Прошу прощения. Еще раз:
Table1:
Id int, pk, identity
Name varchar(50)

Table2:
id int, pk, fk_table1_id
Count Int

Представление:
SELECT dbo.Table1.id, dbo.Table1.Name, dbo.Table2.Count
FROM dbo.Table1 LEFT OUTER JOIN
dbo.Table2 ON dbo.Table1.id = dbo.Table2.ID
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637561
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
триггер то на какую таблицу вешается?
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637563
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneтриггер то на какую таблицу вешается?Триггер он на view хочет, наверно
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637564
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

Абсолютно верно, я хочу переопределить добавление строки в представлении.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637565
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapKonst_Oneтриггер то на какую таблицу вешается?Триггер он на view хочет, наверно

=)
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637567
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мыши плакали, кололись, но продолжали грызть кактус
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637607
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Есть варианты написания триггера?
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637615
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неверная архитектура ведёт за собой неверные способы реализации фукционала.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637619
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Полностью согласен, к сожалению архитектура досталась от предыдущего разработчика.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637621
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

иногда проще написать view, чем перелопатить полторы сотни процедур.

insert table1 output table 2

либо то же через merge.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637896
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Спасибо за поддержку.

К сожалению, не понимаю следующий момент


insert table1(name)
output table2.FK_ID
select name from inserted

Выдает ошибку. можно чуть подробнее
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637907
Посетитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
volt,

ну, во первых, надо перечислять поля, которые вы хотите получить в output, а потом уже указывать into таблицу, куда вставляете.
а во вторых

MSDNТаблица output_table не может:
Иметь включенные триггеры, определенные для нее.
Участвовать в ограничениях FOREIGN KEY с любой стороны.
Иметь ограничения CHECK или активированные правила.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39637994
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, пример.

Я думал, что знаю SQL, как же я ошибался
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39638008
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voltПожалуйста, пример.

Я думал, что знаю SQL, как же я ошибалсяОбъявите табличную переменную.
OUTPUT - в неё.
Оттуда - с айдишниками для привязки вставляете во вторую таблицу.
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39638020
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iap,

написал следующий триггер:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare @t1 table (id int, name varchar(50), Count int)

insert into dbo.[table1] (name)
output
inserted.id,
inserted.name,
[color=red]inserted.count[/color]
into @t1
select name from inserted

insert into dbo.table2 (id, count)
  select id, count from @t1



Выдает ошибку Invalid column name 'count'. не нравится компилятору строка
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39638028
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
voltВыдает ошибку Invalid column name 'count'. не нравится компилятору строка

я же писал вам про мышей и кактус =)

у вас нет такого поля в таблице table1
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39638032
volt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Я прочитал, посмеялся, согласился. Но править из-за этого все БД я не могу. изменить таблицу, что бы в ней содержались все значения тоже странно выглядит
...
Рейтинг: 0 / 0
Триггер Instead Of Insert
    #39638034
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Триггер Instead Of Insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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