从__new执行插入表的语法或方式(列)SELECT col1 +','+ col2 +','+ col3

时间:2019-04-08 08:50:24

标签: sql triggers sybase database-replication

在Sybase ADS和Postgresql中,在触发器INSERT UPDATE和DELETE之前,可以插入OLD和NEW值,因此我有很多代码和函数。我这样做是为了触发触发的复制,它可以捕获并运行每个IUD语句,但是许多表没有主键,因此我必须捕获UPDATES和DELETES的所有OLD值以及INSERTS和UPDATES的NEW值。要么我为任何复制的表创建临时表。

我必须使其具有动态性,或者可以将列查询或存储为表中一组定界列的位置,因为一组用户会在随机时间更改它们。感谢提供的任何建议。

下面的代码似乎给了操作数错误,但是我不知道我是否比我想象的要远。

--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可能更健康,而DB透视则不那么棘手。本质上,如果我能找到一种在列(#2)中存储多个NEW或OLD值的方法,该方法将允许多个表写入该列,因此每个复制源都不必像#1那样有1个表。

我非常感谢任何可以对代码提供指导或建议的人。该示例适用于SYBASE的INSERT,我将其传递给UPDATE和DELETE触发语句。我提到了Postgresql,但我将提出一个单独但等效的问题。

谢谢。

0 个答案:

没有答案