0

誰でもこのタスクを完了するのを手伝ってくれます..

   FirstName  LastName  EmpNumber  EffectiveFrom   EffectiveTo    JobTitle
      john     A        EMP01      2004-05-01      2005-09-01     credit officer
      NULL     NULL     NULL       2005-09-01      2006-30-01     chief credit officer
      NULL     NULL     NULL       2006-30-01      2006-30-09
      george   B        EMP02      
      david    C        EMP03
      NULL     NULL     NULL
      NULL     NULL     NULL

私はそのようなテーブルを持っていて、カーソルで更新してこのように見せたいと思っています

 FirstName  LastName  EmpNumber   EffectiveFrom   EffectiveTo    JobTitle
     john      A       EMP01 
     john      A       EMP01 
     john      A       EMP01 
     george    B       EMP02 
     david     C       EMP03 
     david     C       EMP03 
     david     C       EMP03  
4

2 に答える 2

0

@daniloquioコードからwhereステートメントをコピーしただけで、カーソルでも作成しました。

 DECLARE @NAME  NVARCHAR(500), @LastName NVARCHAR(500), @EmpN NVARCHAR(500), @TN NVARCHAR(500), @TLN NVARCHAR(500), @TEN NVARCHAR(500),
                @EffectiveFrom DATETIME,@EffectiveTo DATETIME,@JobTitle NVARCHAR(500)

DECLARE temp CURSOR FOR
    SELECT  Name, [Last Name], [Employee Number], [Effective From], [Effective To], [Job Title]
    FROM dbo.Positions$

    OPEN temp       

FETCH NEXT FROM temp INTO @Name, @LastName, @EmpN, @EffectiveFrom, @EffectiveTo, @JobTitle

WHILE @@FETCH_STATUS=0
BEGIN
    SELECT @Name, @LastName, @EmpN

    IF @NAME IS NOT NULL
    BEGIN
        SELECT @TN=@NAME, @TLN=@LastName, @TEN=@EmpN
    END
    ELSE
     BEGIN
        UPDATE dbo.Positions$
        SET Name=@TN, 
                [Last Name]=@TLN, 
                [Employee Number]=@TEN 
        WHERE [Effective From] = @EffectiveFrom AND
          [Effective To] = @EffectiveTo AND
          [Job Title] = @JobTitle
     END


    FETCH NEXT FROM temp INTO @Name, @LastName, @EmpN, @EffectiveFrom, @EffectiveTo, @JobTitle
END
CLOSE temp;
DEALLOCATE temp;
于 2012-07-04T10:42:19.040 に答える
0

最後に見つかった null 以外の値を保持する変数を作成します。@FirstNameNN, @LastNameNN, @EmpNumberNN.

カーソルを作成し、各行をフェッチしてそのデータを変数に保存します ( @FirstName, @LastName, @EmpNumber, @EffectiveFrom, @EffectiveTo, @JobTitle)。

カーソルの反復ごとに、次のようにします。

IF @FirstName IS NOT NULL
BEGIN
    SET @FirstNameNN = @FirstName
    SET @LastNameNN = @LastName
    SET @EmpNumberNN = @EmpNumber 
END
ELSE
BEGIN
    UPDATE Employees
      SET FirstName = @FirstNameNN,
          LastName = @LastNameNN,
          EmpNumber = @EmpNumberNN
    WHERE EffectiveFrom = @EffectiveFrom AND
          EffectiveTo = @EffectiveTo AND
          JobTitle = @JobTitle
END

もちろん、最後の 3 列が等しい 2 つの行がある場合、このコードは失敗します。

于 2012-07-03T14:42:53.433 に答える