解析触发器的表达式和计牛
中医保健 2021年09月06日 浏览:2 次
ConcatView 中的表达式 CombinedName 包含由 FirstName 和 LastName 值串联起来的值。如果在 ConcatView 上定义 INSTEAD OF INSERT 触发器,则对 INSERT 语句如何提供 CombinedName 列值必须有相应的规则,让触发器确定字符串的哪部分应放在 FirstName 列中,哪部分应放在 LastName 列中。如果选择的规则是让 INSERT 语句使用 \'first_name;last_name\' 规则指定 CombinedName 的值,则该触发器可成功地处理 INSERT:
CREATE TRIGGER InsteadSample on ConcatViewINSTEAD OF INSERTASBEGIN INSERT INTO SampleTable SELECT PriKey, -- Pull out the first name string. SUBSTRING( CombinedName, 1, (CHARINDEX(\';\', CombinedName) - 1) ), -- Pull out the last name string. SUBSTRING( CombinedName, (CHARINDEX(\';\', CombinedName) + 1), DATALENGTH(CombinedName) ) FROM insertedEND
需要类似的逻辑来处理本身是简单表达式,但引用的计算列中包含复杂表达式的视图列。
一些视图表达式可转换基表列的值,例如通过执行数学运算或使用列作为函数的参数。在这种情况下,INSTEAD OF INSERT 触发器中的逻辑可采用两种方法:
下次洛水之战活动将开启洛水反击战 ◆规则可以是:所有 INSERT 语句提供要放在基表中的原始值,而触发器逻辑将该值从 inserted 表移到基表。
◆规则可以是:所有 INSERT 语句提供预期得到的由视图上的 SELECT 返回的值,在这种情况下触发器中的逻辑必须反转此操作。例如:
CREATE TABLE BaseTable (PrimaryKey int PRIMARY KEY,ColumnB int,ColumnC decimal(19,3) )CREATE VIEW SquareView ASSELECT PrimaryKey, ColumnB,-- Square the value of ColumnCSQUARE(ColumnC) AS SquareCFROM BaseTableCREATE TRIGGER SquareTrigger ON SquareViewINSTEAD OF INSERTASBEGININSERT INTO BaseTableSELECT PrimaryKey, ColumnB,-- Perform logical inverse of function in RT(SquareC)FROM insertedEND
对于某些表达式(如使用加法和减法等数学运算的复杂表达式),用户也许不可能提供特定的值供触发器明确地生成目的基表列的值。例如,如果视图选择列表包含表达式 IntColA + IntColB AS AddedColumns,那么 dedColumns 中的值 10 表示什么?10 是3 + 7、2 + 8 还是 5 + 5 的结果?仅从 dedColumns 值没有办法得知什么值应放置在 IntColA 和 IntColB 中。
在这些情况下,可对触发器进行编码以使用备用信息源确定基表列中要设置的值。对于具有 INSTEAD OF 触发器的视图,视图选择列表必须包含足够的信息,以生成由触发器修改的基表中所有非空列的值。并不是所有的数据都必须直接来自 inserted 表。在一些情况下,inserted 表中的值可以是触发器用于检索其它基表中相关数据的键值。
天津治疗白癜风去哪里石家庄妇科哪家医院好
如何改善睡眠

- 上一篇: 解析对中国标准的反应覆盖
- 下一篇 解析地址连接数据库速度慢的原因呢
-
场地越野韩城站落幕科马仕轮胎车队勇夺双冠
2020-08-13
-
2016年大型中医医院巡查启动
2019-07-13
-
如何由小到大免疫力提升抵抗力的方法
2019-07-07
-
山羊角的功效与作用
2019-07-07
-
桐根的功效与作用
2019-07-07
-
米饭不能跟哪些食物同食
2019-07-06