none
SQL中流控制语句if else 的问题 RRS feed

  • 问题

  • hot是一个int型字段

    update goodinfo set hot=
    case hot
    when 0 then 1
    when 1 then 0

    我可以用这样的控制流语句,来变更0和1,我想换成if else 的可以吗

    2010年4月15日 8:03

答案

  • hot是一个int型字段

    update goodinfo set hot=
    case hot
    when 0 then 1
    when 1 then 0

    我可以用这样的控制流语句,来变更0和1,我想换成if else 的可以吗

    update goodinfo set hot=1-cast(hot as smallint)

    改為這樣

    用 if 需要用游標一條條判斷沒有必要這樣做


    ROY WU(吳熹)
    2010年4月15日 8:30
    版主
  • CREATE TABLE goodinfo(Hot BIT,ID INT IDENTITY PRIMARY KEY)
    
    INSERT goodinfo SELECT 1
    INSERT goodinfo SELECT 1
    INSERT goodinfo SELECT 0
    INSERT goodinfo SELECT 1
    
    
    
    
    DECLARE Cur1 CURSOR FOR
    SELECT ID,Hot FROM goodinfo WHERE Hot IN(0,1)--條件
    DECLARE @Hot BIT,@ID INT
    OPEN Cur1
    FETCH NEXT FROM Cur1 INTO @ID,@Hot
    WHILE @@FETCH_STATUS=0
    BEGIN
      IF @Hot=1
        UPDATE goodinfo SET Hot=0 WHERE ID=@ID
      ELSE
        UPDATE goodinfo SET Hot=1 WHERE ID=@ID
    FETCH NEXT FROM Cur1 INTO @ID,@Hot
    END
    CLOSE Cur1
    DEALLOCATE Cur1
    
    
    --更新游標
    DECLARE Cur2 CURSOR LOCAL
    FOR
    SELECT Hot FROM goodinfo WHERE Hot IN(0,1)--條件
    DECLARE @Hot BIT
    OPEN Cur2
    FETCH Cur2 INTO @Hot
    WHILE @@FETCH_STATUS>=0
    BEGIN
      UPDATE goodinfo SET Hot=1-CAST(@Hot AS SMALLINT)
      WHERE CURRENT OF Cur2
      FETCH Cur2 INTO @Hot
    END
    CLOSE Cur2
    DEALLOCATE Cur2
    舉個例子

    谢谢您啊,但是要做的话,语句是怎样写的呢

    游标要一条条的判断是什么情况啊?

     



    ROY WU(吳熹)
    2010年4月16日 2:49
    版主

全部回复

  • hot是一个int型字段

    update goodinfo set hot=
    case hot
    when 0 then 1
    when 1 then 0

    我可以用这样的控制流语句,来变更0和1,我想换成if else 的可以吗

    update goodinfo set hot=1-cast(hot as smallint)

    改為這樣

    用 if 需要用游標一條條判斷沒有必要這樣做


    ROY WU(吳熹)
    2010年4月15日 8:30
    版主
  • 谢谢您啊,但是要做的话,语句是怎样写的呢

    游标要一条条的判断是什么情况啊?

     

    2010年4月16日 2:13
  • CREATE TABLE goodinfo(Hot BIT,ID INT IDENTITY PRIMARY KEY)
    
    INSERT goodinfo SELECT 1
    INSERT goodinfo SELECT 1
    INSERT goodinfo SELECT 0
    INSERT goodinfo SELECT 1
    
    
    
    
    DECLARE Cur1 CURSOR FOR
    SELECT ID,Hot FROM goodinfo WHERE Hot IN(0,1)--條件
    DECLARE @Hot BIT,@ID INT
    OPEN Cur1
    FETCH NEXT FROM Cur1 INTO @ID,@Hot
    WHILE @@FETCH_STATUS=0
    BEGIN
      IF @Hot=1
        UPDATE goodinfo SET Hot=0 WHERE ID=@ID
      ELSE
        UPDATE goodinfo SET Hot=1 WHERE ID=@ID
    FETCH NEXT FROM Cur1 INTO @ID,@Hot
    END
    CLOSE Cur1
    DEALLOCATE Cur1
    
    
    --更新游標
    DECLARE Cur2 CURSOR LOCAL
    FOR
    SELECT Hot FROM goodinfo WHERE Hot IN(0,1)--條件
    DECLARE @Hot BIT
    OPEN Cur2
    FETCH Cur2 INTO @Hot
    WHILE @@FETCH_STATUS>=0
    BEGIN
      UPDATE goodinfo SET Hot=1-CAST(@Hot AS SMALLINT)
      WHERE CURRENT OF Cur2
      FETCH Cur2 INTO @Hot
    END
    CLOSE Cur2
    DEALLOCATE Cur2
    舉個例子

    谢谢您啊,但是要做的话,语句是怎样写的呢

    游标要一条条的判断是什么情况啊?

     



    ROY WU(吳熹)
    2010年4月16日 2:49
    版主
  • IIf(«Logical Expression», «Numeric Expression1», «Numeric Expression2») 够用吗?

    2010年4月19日 8:59
  • 当然可以,但可以更简单的实现:

    Update goodinfo
      Set hot=hot ^1

    2010年4月19日 14:46