点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
如果我有一个带有触发器的表,并且在该表上放了一列,则会收到警告消息:
警告:表" mytable"的架构已更改。
在该表上使用'if update(column-name)子句删除并重新创建每个触发器。
第一个问题,警告中的"列名"是否仅指我删除的列?
此外,在文档中:
SAP ASE->参考->命令->更改表-> 更改表架构
它说:
"为确保触发器正确触发,请在执行添加,删除,修改或锁定操作后删除并重新创建已更改表上的所有触发器"
拖放并重新创建 * all * 触发器,即使它们未引用修改后的列也是如此? 是真的吗?
我的猜测是,有两个特殊的表"插入"和"删除",它们需要在alter table之后获得新的列列表。
因此,即使您没有在
记住,ASE在存储过程中转换" select * from table-name"以按列选择所有列,请记住ASE编译后的代码可能不反映新的列集。 -name
-避免以后捕获丢失的添加列,并且
-捕获丢失的列(如果有)。
HTH
Avinash
还请注意ASE 16触发器REPLACE问题,该问题是由具有sa角色的非sa登录创建的。
我们发现drop + create可以正常工作。
您好,
这是使用" if update()"的触发器的示例代码
创建表tt(c1 int null,c2 int null,c3 varchar(6)null,c4 varchar( 6)null)
go
在tt上创建触发器tx,以进行更新,如果update(c2)开始更新tt,则设置c3 =" change" end
go
插入tt值(1, 1," new"," new")
转到
更新tt set c2 = 2
转到
截断表中选择* tt
插入tt值(1,1," new"," new")
go
update tt set c2 = 2 < br> go
select * from tt
go
1> 2> 3> 1> 2> 3> 1> 2>(受影响的1行)
1> 2>( 1行受影响)
1> 2> c1 c2 c3 c4
----------- ----------- ------ ---- -
1 2更改新内容
(受影响的1行)
1> 2> 3> 4> 1> 2>(受影响的1行)
1> 2>警告: 表" tt"的模式已更改。 拖放并重新创建使用'if update(column-name)子句的此表上的每个触发器。
(受影响的1行)
1> 2>(受影响的1行)
1> 2> c2 c3 c4
----------- ------ ------
2个新的new <-----触发器未更新列 c2可以按预期"更改"。
(受影响的1行)
干杯,
-bret
一周热门 更多>