Хранимая процедура на фильтрацию

brato4karik

Добрый день как бы организовать работу в базе MS SQL таким образом есть таблица А в нее попдают данные из программы с интервалом приблезительно в 5 скунд пачка данных составляет 25 записей, в результате даные повторяються и есть другая таблица В в не надо перекидывать данные из таблички А только без повторов, допустим с интервлом в 5 мин, помогите как организовать эту идею, возможно нужна хранимка, если да то подскажите как ее написать и запускать по времени в самой базе
8 ответов

brato4karik

А может в таблице A хранить данные без повторов, и тогда таблица В и не нужна ?


brato4karik

нет получаеться это необходимость потомучто в эту таблицу попадают данные перехваченный с формы другой программы, это статистика выпуска продукции(производиталь не предусмотрел подробную статистику а она потребовалась) в результате был написан прехватчик данных который фильтрует данные но панельные компы на фасовочных апаратах слабы и получаются пропускают даные когда проверют средсвами клиента на повторы весь предыдущий набор даных, а в сутки набегает почти 35 000 , так вот идея скидывать все подряд с более длинным интервалом в одну таблицу и средствами базы ее фильтровать, а брать из окна вывода только последние не получаеться поскольку элемен вывода TListView как мы узнаем что он добавилстрочку ? события не отследить, вот и получаеться барть все через каждые 5 или побольше секунд кидать во временную сервер обработает и подчистит табличку и так покругу


brato4karik

нет получаеться
Не получаеится написать триггер, который не допустит добавления дубликатов что ли ?


brato4karik

Select DISCTINC ... и настроить это через триггер(в вашем случае думаю не стоит) или автоматизировать через джоб. Зависит, от времени актульности данных в табл. B.


brato4karik

Рекомендую автору рассмотреть возможность использования опции IGNORE_DUP_KEY


brato4karik

объясине пожалуйста поподробней если не трудно щас проуедура такая апендом добавляються строчки в базу , как напистаь тригер(ни разу не делал) соответственно как будет выглядеть ошибка если когда тригер найдет повтор, прога должна работать в фоне и за ней никто не следит ее даже не видят


brato4karik

brato4karik,CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH [ ,...n ] ]{ FOR | AFTER | INSTEAD OF - это } { [ INSERT - вам над, я так понял на Insert,] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] [ ,...n ] | EXTERNAL NAME }в тексте триггера уже проверять одинаковые записи.Но триггер может уменьшить производительность системы


brato4karik

Всё это можно в процедуру и процедуру в джоб и каждую ночь выполнять.
declare @DeadDate datetime
select @DeadDate=DATEADD(day,-<b>1</b>,GetDate()) --минус один день от реальной даты

INSERT INTO Table_B
				(поле1,
				поле2,
				полеВремяВставки3,
				поле4)
			SELECT				
				полеДубликат1,
				поле2,
				полеВремяВставки3,
				поле4
			FROM
				Table_A
			where полеВремяВставки3<@DeadDate --первый раз условие комментим
			Group by поле1,	поле2,полеВремяВставки3,поле4 --убираем дубликаты