0

我有一个表格test_123,其列如下:

int_1         (int), 
datetime_1    (datetime), 
tinyint_1     (tinyint), 
datetime_2    (datetime)

因此,当datetime_1更新列并且列的值tinyint_1= 1 时,我必须datetime_2使用列值更新我的列datetime_1

我为此创建了以下触发器..但是使用我的触发器时,它会更新所有datetime2列值,其中datetime_1列 when tinyint_1= 1 .. 但我只想更新datetime_1值已更新的特定行(我的意思是已更改)..

下面是触发器。。

CREATE TRIGGER test_trigger_upd
ON test_123 

FOR UPDATE
AS
FOR EACH STATEMENT 
IF UPDATE(datetime_1) 

BEGIN


UPDATE test_123 
SET test_123.datetime_2  = inserted.datetime_1                     
WHERE test_123.tinyint_1 = 1

END
4

1 回答 1

1

ASE 不支持 ROW 级触发器。只有语句后触发器。

如前所述,您面临的问题是您需要能够将“插入”伪表中的行链接到基表本身。只有在有键的情况下才能这样做——意思是:唯一标识行的列,或这样做的列的组合。否则,您根本无法识别需要更新的行,因为如果不能保证唯一性,可能会有多行具有相同的列值。(附带说明:表中没有键是不好的设计实践——这个问题是众多原因之一)。

一个简单的解决方案是在表中添加一个标识列,例如

ALTER TABLE test_123 ADD idcol INT IDENTITY NOT NULL

然后,您可以将谓词添加'test_123.idcol = inserted.idcol'到触发器联接。

于 2015-01-22T00:13:28.997 回答