--创建触发器
CREATE TRIGGER DepartmentsUpdate ON dbo.Departments
FOR UPDATE
AS
BEGIN 
IF(COLUMNS_UPDATED()&01)>0---这句看不懂
UPDATE dbo.Employees
SET DepartmentID = (SELECT ins.DepartmentID FROM inserted ins)
WHERE DepartmentID = (SELECT DepartmentID FROM deleted)
END 

解决方案 »

  1.   

    IF(COLUMNS_UPDATED()&01)>0
    判断第一列是否被更新
      

  2.   

    IF (COLUMNS_UPDATED()) 测试是否插入或更新了提及的列,仅用于 INSERT 或 UPDATE 触发器中。COLUMNS_UPDATED 返回 varbinary 位模式,表示插入或更新了表中的哪些列。COLUMNS_UPDATED 函数以从左到右的顺序返回位,最左边的为最不重要的位。最左边的位表示表中的第一列;向右的下一位表示第二列,依此类推。如果在表上创建的触发器包含 8 列以上,则 COLUMNS_UPDATED 返回多个字节,最左边的为最不重要的字节。在 INSERT 操作中 COLUMNS_UPDATED 将对所有列返回 TRUE 值,因为这些列插入了显式值或隐性 (NULL) 值。可以在触发器主体中的任意位置使用 COLUMNS_UPDATED---------------
    楼主能不能明白这段先
      

  3.   

    这个不明白时可不能乱来???
    -----------------首先要知道表的列名,不知道的情况下,只能用SUBSTRING(COLUMNS_UPDATED(),1,1)取前8列,不能用COLUMNS_UPDATED()直接取..
      

  4.   

    举个例子:以8列为一个单位SUBSTRING(COLUMNS_UPDATED(),1,1)--第一个8列
    第9列开始:
    SUBSTRING(COLUMNS_UPDATED(),2,1)--第二个8列
    ..以此类推SUBSTRING(COLUMNS_UPDATED(),1,1)=power(2,(3-1))--第3列SUBSTRING(COLUMNS_UPDATED(),2,1)=power(2,(3-1))--第11列
      

  5.   

    首先要知道表的"列名"?列数
    打错,COLUMNS_UPDATED()只能不超过8列时才能直接用--