触发器中columns_update()函数怎么用,能解释一下吗? 上面的更改列数是“or”的关系,不是"and"的关系 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 IF (COLUMNS_UPDATED()) 测试是否插入或更新了提及的列,仅用于 INSERT 或 UPDATE 触发器中。COLUMNS_UPDATED 返回 varbinary 位模式,表示插入或更新了表中的哪些列。COLUMNS_UPDATED 函数以从左到右的顺序返回位,最左边的为最不重要的位。最左边的位表示表中的第一列;向右的下一位表示第二列,依此类推。如果在表上创建的触发器包含 8 列以上,则 COLUMNS_UPDATED 返回多个字节,最左边的为最不重要的字节。在 INSERT 操作中 COLUMNS_UPDATED 将对所有列返回 TRUE 值,因为这些列插入了显式值或隐性 (NULL) 值。可以在触发器主体中的任意位置使用 COLUMNS_UPDATED。IF (COLUMNS_UPDATED())判断提及的一列或多列是插入还是更新,仅用于 INTSERT 或 UPDATE 触发器中。COLUMNS_UPDATED 返回 varbinary 位模式,该位模式表示表的哪些列进行了插入操作,哪些列进行了更新操作。可以在触发器主体中的任意位置使用 COLUMNS_UPDATED。bitwise_operator是用于比较运算的位运算符。updated_bitmask是整型位掩码,表示实际更新或插入的列。例如,表 t1 包含列 C1、C2、C3、C4 和 C5。假定表 t1 上有 UPDATE 触发器,若要检查列 C2、C3 和 C4 是否都有更新,指定值 14;若要检查是否只有列 C2 有更新,指定值 2。comparison_operator是比较运算符。使用等号 (=) 检查 updated_bitmask 中指定的所有列是否都实际进行了更新。使用大于号 (>) 来检查 updated_bitmask 中指定的列是否有进行过更新的,或者没有全部进行更新。column_bitmask是要检查的列的整型位掩码。 它是用来判断修改的是那个字段。例如if columns_updated()='字段名' 处理。 这个我知道,但是你仔细看看:如果必须测试影响到表中前 8 列以外的列的更新时,必须使用 UBSTRING 函数测试由 COLUMNS_UPDATED 返回的适当的位。这句话,要用substring而且如果用if columns_update()='字段名'来处理的话如果我要判断修改的列有20列的话,我岂不是要写20个columns_update()? 11111111 11111111 11111111 你18个列,应该返回3个字节,5,6,8,一组 2的4次方 + 2的5次方 + 2的7次方 = 17610,15,16,一组 2的(9-8)次方 + 2的(14-8)次方 +2的(15-8)次方 = 194 18 一组 2的(18-16)次方 = 4IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(5-1)) + power(2,(6-1)) + power(2,(8-1))) AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(2-1)) + power(2,(6-1)) + power(2,(7-1))) AND (SUBSTRING(COLUMNS_UPDATED(),3,1)=power(2,(2-1))) ) COLUMNS_UPDATED 函数以从左到右的顺序返回位,最左边的为最不重要的位。最左边的位表示表中的第一列;向右的下一位表示第二列,依此类推。如果在表上创建的触发器包含 8 列以上,则 COLUMNS_UPDATED 返回多个字节,最左边的为最不重要的字节。 TO:HawaiiLeo(罗马数字)上面的一段代码含义是:18个列只要有一个列更改就触发呢还是要所有的列都更改才触发?就是是“or”还是“and ”?谢谢 求一段SQL mysql两表查询的问题 查询条件为日期时怎么优化~~~ 问一个很NAIVE的问题 全文检索错误!!!!!!!!!! sql server compact4.0怎么修改表名 高手请帮下忙数据库的问题 两表合并(在列上合并,不是UNION),高手解答! 统计查询 在线等,求大家帮帮忙 sql server的購買與使用問題? 存储过程,不难,但一时搞不定,请教
if columns_updated()='字段名'
处理。
如果必须测试影响到表中前 8 列以外的列的更新时,必须使用 UBSTRING 函数测试由 COLUMNS_UPDATED 返回的适当的位。
这句话,要用substring
而且如果用if columns_update()='字段名'来处理的话
如果我要判断修改的列有20列的话,我岂不是要写20个columns_update()?
5,6,8,一组 2的4次方 + 2的5次方 + 2的7次方 = 176
10,15,16,一组 2的(9-8)次方 + 2的(14-8)次方 +2的(15-8)次方 = 194
18 一组 2的(18-16)次方 = 4IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(5-1))
+ power(2,(6-1)) + power(2,(8-1)))
AND (SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(2-1))
+ power(2,(6-1)) + power(2,(7-1)))
AND (SUBSTRING(COLUMNS_UPDATED(),3,1)=power(2,(2-1)))
)
最左边的位表示表中的第一列;向右的下一位表示第二列,依此类推。
如果在表上创建的触发器包含 8 列以上,则 COLUMNS_UPDATED 返回多个字节,最左边的为最不重要的字节。
上面的一段代码含义是:18个列只要有一个列更改就触发呢还是要所有的列都更改才触发?
就是是“or”还是“and ”?
谢谢