sql2000中COLUMNS_UPDATED()的问题
在触发器中可以用COLUMNS_UPDATED()来判断哪些列更新了
它还有分前八列内和八列以上更新的情况
八列内:IF (COLUMNS_UPDATED() & 14) > 0
查看2 3 4列是否更新
怎么理解????
是不是IF (COLUMNS_UPDATED() & 14) = 14 也可以???
八列以上:如更新2 3 9列
IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(3-1))
+ power(2,(5-1)))
AND (SUBSTRING(COLUMNS_UPDATED()(),2,1)=power(2,(1-1)))
)
怎么理解????希望帮小弟讲解详细点 谢谢
希望大哥们不吝赐教!!!谢谢
------解决方案--------------------八列内:IF (COLUMNS_UPDATED() & 14) > 0 表示 2 3 4 列其中至少有一列更新了
IF (COLUMNS_UPDATED() & 14) = 14 表示2 3 4 列都更新了
------解决方案--------------------如果一个表超过8个列,COLUMNS_UPDATED()会返回多个字节 一个字节是8位
SUBSTRING(COLUMNS_UPDATED(),1,1) 是获取第一个字节 可以判断1-8列是否更新
SUBSTRING(COLUMNS_UPDATED(),2,1) 是获取第二个字节 可以判断9-16列是否更新
SUBSTRING(COLUMNS_UPDATED(),3,1) 是获取第三个字节 可以判断17-24列是否更新
------解决方案--------------------2 3 4列对应的数是14
14是怎么得来的???
----
14 = power(2,1)+power(2,2)+power(2,3)
我要是5 6 8列对应的又是什么值?????
----
power(2,4)+power(2,5)+power(2,7) = 176
------解决方案--------------------14的二进制值为 00001110
------解决方案--------------------我晕倒
------解决方案--------------------一个字节是8位,所以2 3 4位对应00001110
9-16 列对应第二个字节 11列更新则 000000100
17-24列对应第三个字节 18列更新则 000000010
25-32列对应第四个字节 25列更新则 000000001
酱紫吧