Синтаксис или способ выполнения INSERT INTO TABLE (столбцы) SELECT col1 + ',' + col2 + ',' + col3 из __new - PullRequest
0 голосов
/ 08 апреля 2019

У меня много кода и функций, использующих возможность вставлять значения OLD и NEW ДО триггера INSERT UPDATE и DELETE, в Sybase ADS и Postgresql. Я делаю это для запуска репликации, которая может захватывать и запускать каждый оператор IUD по мере его поступления, но во многих таблицах нет первичных ключей, поэтому мне нужно захватить все значения OLD для UPDATES и DELETES, а также значения NEW для INSERTS и UPDATES. Либо так, либо я создаю временные таблицы для любой реплицируемой таблицы.

Мне нужно сделать его динамическим, чтобы столбцы можно было запрашивать или хранить как набор столбцов с разделителями в таблице, потому что группа пользователей будет изменять их в случайное время. Я ценю любую помощь, предлагаемую советом.

Кажется, что следующий код дает инклюзивные ошибки операнда, но я не знаю, насколько я дальше, чем я думаю.

--1. using "temp tables" per replicating source
IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = 'table' AND type = 'U')
THEN
(select * into #table_repllog from __new;
Alter table #table_repllog add column Repl_TriggerCmd char(10);
Alter table #table_repllog add column Repl_Status Char(50);
Alter table #table_repllog add column Repl_TimeDate timestamp;
update #table_repllog set Repl_TriggerType='I',Repl_Status='READY',Repl_CreateTimeDate=NOW() WHERE Repl_TriggerType IS NULL,Repl_Status IS NULL,Repl_CreateTimeDate IS NULL)


--OR

--2. INSERT multiple delimited values into NewValues column

INSERT INTO log (TableName, TriggerCmd, Status, TimeDate,NewValues) select 'tablename','INSERT','READY', NOW(),col1+','+col2+','+col3 from __new;
  1. - наиболее желательный результат, но № 1, вероятно, более здоровый и менее хитрый с точки зрения БД. По сути, если я найду способ хранить несколько значений NEW или OLD в столбце (# 2), который позволит записывать в него несколько таблиц, чтобы мне не пришлось иметь по 1 таблице на каждый реплицируемый источник, такой как # 1.

Я ценю любого, кто может дать указатель или совет по коду. Пример для INSERT для SYBASE, который я передам в оператор триггера UPDATE и DELETE. Я упомянул Postgresql, но я сделаю отдельный, но эквивалентный вопрос.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...