Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 view for instead of insert trigger  [new]
White Owl
Member

Откуда:
Сообщений: 12556
Задача: Есть таблица с кучкой вычислимых полей. Есть файл который надо загрузить в эту таблицу, но при этом надо игнорировать некоторые поля из файла.
Подумал и решил что проще всего это будет решить через view с висящим на нем instead of insert триггером. Потом просто делаем bcp in в этот view а триггер уже разберет какое поле из inserted в какое поле таблицы отправить...

Но читаю вот эту статью: https://msdn.microsoft.com/en-us/library/def01zh2.aspx
И прихожу к выводу, что если view предназначена только для такой интеллектуальной вставки, то совершенно не важно что именно это view показывает...
То есть я могу сделать
create view stage_view_for_table_1 as
select 1
go

create trigger I on stage_view_for_table_1
instead of insert as
insert into table_1 (f1,f2,f3) 
select f6, f100, f1245 from inserted
go

Я прав или каких-то подводных камней не замечаю?
1 мар 16, 20:53    [18884514]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
White Owl
Задача: Есть таблица с кучкой вычислимых полей. Есть файл который надо загрузить в эту таблицу, но при этом надо игнорировать некоторые поля из файла.
Подумал и решил что проще всего это будет решить через view с висящим на нем instead of insert триггером. Потом просто делаем bcp in в этот view а триггер уже разберет какое поле из inserted в какое поле таблицы отправить...

Но читаю вот эту статью: https://msdn.microsoft.com/en-us/library/def01zh2.aspx
И прихожу к выводу, что если view предназначена только для такой интеллектуальной вставки, то совершенно не важно что именно это view показывает...
То есть я могу сделать
create view stage_view_for_table_1 as
select 1
go

create trigger I on stage_view_for_table_1
instead of insert as
insert into table_1 (f1,f2,f3) 
select f6, f100, f1245 from inserted
go


Я прав или каких-то подводных камней не замечаю?
В inserted могут быть только поля VIEW (объекта, для которого создан триггер)
1 мар 16, 21:06    [18884576]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Это не считая того, что все поля VIEW должны иметь имена, причём уникальные
1 мар 16, 21:07    [18884579]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
White Owl
Member

Откуда:
Сообщений: 12556
iap
В inserted могут быть только поля VIEW (объекта, для которого создан триггер)
Ну судя по MSDN - нет. Там могут быть поля таблицы для которого создан view, а не поля самого view.

Ну тогда должно сработать что-то в духе.
create view stage_view_for_table_1 as
select pk from table_1 where 1=0
go


Ну нету у меня сию секунду сервера для игр, нету... :`(
1 мар 16, 21:11    [18884596]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
White Owl
Там могут быть поля таблицы для которого создан view, а не поля самого view.
White Owl
create view stage_view_for_table_1 as
select 1
go
Где здесь таблица?
Не говоря о том, что полями VIEW становятся поля SELECTа, а не поля таблицы.
1 мар 16, 21:26    [18884657]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Не нужно триггеров.
Достаточно просто view с перечислением нужных столбцов в нужном порядке.
Или format file, в котором исключить ненужные столбцы.
1 мар 16, 22:36    [18884897]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Богатая фантазия у автора... Используйте SSIS.
1 мар 16, 22:43    [18884916]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
White Owl
Задача: Есть таблица с кучкой вычислимых полей. Есть файл который надо загрузить в эту таблицу, но при этом надо игнорировать некоторые поля из файла.
Подумал и решил что проще всего это будет решить через view с висящим на нем instead of insert триггером. Потом просто делаем bcp in в этот view а триггер уже разберет какое поле из inserted в какое поле таблицы отправить...
Проще вставить данные из файла в врвменную таблицу для импорта, а потом запросом, процедурой оттуда в постоянную таблицу.

Кроме того, что это проще, ещё может быть и быстрее.
2 мар 16, 08:36    [18885588]     Ответить | Цитировать Сообщить модератору
 Re: view for instead of insert trigger  [new]
Glory
Member

Откуда:
Сообщений: 104760
White Owl
Подумал и решил что проще всего это будет решить через view с висящим на нем instead of insert триггером. Потом просто делаем bcp in в этот view а триггер уже разберет какое поле из inserted в какое поле таблицы отправить...

Зачем просто, если можно сложно ?

https://technet.microsoft.com/en-us/library/ms187086(v=sql.105).aspx
https://msdn.microsoft.com/en-us/library/ms179250.aspx
https://msdn.microsoft.com/en-us/library/ms187908.aspx
2 мар 16, 09:46    [18885878]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить