日期:2014-05-18  浏览次数:20475 次

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
酱紫吧