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

Откуда:
Сообщений: 29
Всем привет.
Сторонее ПО вставляет в таблицу не все данные.
Написан скрипт "довставки".
"Довставлять" нужно каждый раз при вставке данных сторонним ПО. Как можно осуществить сей механизм?
14 сен 09, 10:59    [7653985]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Триггром?
14 сен 09, 11:00    [7653996]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
aleks2
Guest
ZaletoFF,

Тригерры в школе не проходят?
14 сен 09, 11:01    [7653998]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
А с чем конкретно у вас проблемы?
Отловить момент, когда нужно запускать "скрипт довставки"?
14 сен 09, 11:02    [7654004]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
remi_
Member

Откуда: СПб
Сообщений: 244
Собственно, надо как-то зафиксировать сам факт сторонней вставки.
Можно добавить новое поле со значением по умолчанию 1. Пустить Job, который проверяет наличие записей со значением в этом поле 1. Если они есть, он заменяет их на 2 и запускает довставку.
14 сен 09, 11:03    [7654017]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
remi_
Собственно, надо как-то зафиксировать сам факт сторонней вставки.
Можно добавить новое поле со значением по умолчанию 1. Пустить Job, который проверяет наличие записей со значением в этом поле 1. Если они есть, он заменяет их на 2 и запускает довставку.


Ваш вариант допустим только, если "Довставлять" нужно не критически важные данные, когда есть возможность осуществлять работу ПО без них, тот промежуток времени, через который будет запускаться Job.

Иначе все же лучше воспользоваться триггерами…

PS еще можно посмотреть в сторону значений по умолчанию и вычисляемые поля…
14 сен 09, 11:14    [7654094]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
remi_
Member

Откуда: СПб
Сообщений: 244
DENIS_CHEL
Ваш вариант допустим только, если "Довставлять" нужно не критически важные данные, когда есть возможность осуществлять работу ПО без них, тот промежуток времени, через который будет запускаться Job.

Согласен.
Только, если не вмешиваться в стороннее ПО, то, что собственно, должно быть в триггере? Как в нем различать "собственный" и "сторонний" вызовы? Я просто предположил, что надо бы оставить и возможность "своего" добавления, отличного от "довставки".
Естественно, чистые домыслы, автор весьма скупо описал задачу.

Сообщение было отредактировано: 14 сен 09, 11:33
14 сен 09, 11:31    [7654191]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Одна и та же таблица. Вешаю триггер на инсерт.
Довставляю своим инсертом. Вызывается триггер на insert. Довставляю своим инсертом.
14 сен 09, 11:43    [7654263]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Паганель, да.
remi_, структуру менять нельзя.
14 сен 09, 11:44    [7654277]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Паганель
А с чем конкретно у вас проблемы?
Отловить момент, когда нужно запускать "скрипт довставки"?
ZaletoFF
Паганель, да.
Это "стороннее ПО" вставляет данные в БД посредством вызова предназначенной для этого хранимки, правда ведь?
Так добавьте свой код "довставки" в эту хранимку, и всего делов
14 сен 09, 11:47    [7654298]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Паганель, разработчик по головке не погладит за это, хотя поинтересуюсь у начальства.
А по существу? В триггере на инсерт писать инсерт? Может я туплю, но, кмк, это не вариант...
14 сен 09, 11:52    [7654330]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
ZaletoFF
Паганель, разработчик по головке не погладит за это
Так у Вас есть возможность связаться с разработчиком?
Тогда просто ничего не делайте, а договоритесь (возможно, через начальство),
пусть они свое ПО изменят сами
Так действительно намного лучше
14 сен 09, 11:54    [7654353]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
ZaletoFF

А по существу? В триггере на инсерт писать инсерт? Может я туплю, но, кмк, это не вариант...

Ну вот объясните сначала, что есть это ваша "довствака". Вы хотите для каждой добавленной сторонним ПО записи внести в таблицу еще записей ?
14 сен 09, 11:55    [7654355]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Пример.
Описывается процедура кипячения воды: берем чайник, наливаем воду, кипятим, снимаем чайник. Но в какой-то момент понимаем, что перед "кипятим" нужно "включаем газ", а перед "снимаем чайник" нужно "выключаем газ". В общем, упрощенная модель вполне устраивала "когда-то", но для полноты данных "сейчас" понадобилось добавить данные о модели чайника и операции включения\выключения газа. Надеюсь мысль ясна.
Добавить в хранимку свой код, это конечно вариант, но не в моем случае. Только если разработчик внесет скрипт в свой код, а это маловероятно.
14 сен 09, 12:03    [7654401]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Glory, именно.
14 сен 09, 12:04    [7654409]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104760
ZaletoFF
Glory, именно.

Ну так что вас удивляет в том, что для этого придется писать еще insert ?
Другой команды для добавления записей пока нет
14 сен 09, 12:06    [7654416]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Про чайник. Каждая операция заносится как отдельная строка. Нужно добавить ещё 2 строки с выключить\включить газ.
14 сен 09, 12:07    [7654421]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
ZaletoFF
Пример.
Описывается процедура кипячения воды: берем чайник, наливаем воду, кипятим, снимаем чайник. Но в какой-то момент понимаем, что перед "кипятим" нужно "включаем газ", а перед "снимаем чайник" нужно "выключаем газ". В общем, упрощенная модель вполне устраивала "когда-то", но для полноты данных "сейчас" понадобилось добавить данные о модели чайника и операции включения\выключения газа. Надеюсь мысль ясна.
Добавить в хранимку свой код, это конечно вариант, но не в моем случае. Только если разработчик внесет скрипт в свой код, а это маловероятно.


create table dbo.t(a int, b int)
GO

CREATE TRIGGER trig1
on dbo.t
AFTER INSERT
AS 
	if((SELECT count(*) FROM inserted WHERE a=1)<1)
		return
	INSERT INTO dbo.t(a,b) 
	SELECT 2,124
GO

INSERT INTO dbo.t(a,b)
SELECT 1,1 UNION ALL
SELECT 2,1

SELECT a,b FROM dbo.t

drop table dbo.t

?
14 сен 09, 12:08    [7654428]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Glory, то есть, пишу триггер на инсерт в таблицу. В теле триггера пишу свой же инсерт. И зацикливания не будет?
14 сен 09, 12:08    [7654429]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31219
ZaletoFF
Про чайник. Каждая операция заносится как отдельная строка. Нужно добавить ещё 2 строки с выключить\включить газ.
Ну так вставляйте в триггере, проверяя перед вставкой, были-ли уже добавлены нужные строки.
14 сен 09, 12:09    [7654442]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
DENIS_CHEL, а ларчик просто открывался. Спасибо.
14 сен 09, 12:13    [7654458]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
ZaletoFF
Member

Откуда:
Сообщений: 29
Всем спасибо за помощь:)
14 сен 09, 12:14    [7654469]     Ответить | Цитировать Сообщить модератору
 Re: Вставка по событию в ту же таблицу  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Рекомендую уведомить разработчиков о том, что Вы не таблицу триггер навесили
14 сен 09, 12:15    [7654472]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить