5

という特定のテーブルの列を更新したいと考えていますEmployeekopie1

更新しようとしている列はFK_Profiel(値は type ですint)

列に入れようとしてFK_Profielいる値は、カーソルから取得している値です。カーソルは、結合を使用して正しい値を取得しながら、別のテーブルの列から値を取得しています。

使用された選択クエリの結果は、異なる値を持つ複数の行を返します。

選択クエリの最初の結果は 114 で、これは正しいです。問題は、この値が列のすべてのフィールドに割り当てられることFK_Profielです。これは私の意図ではありません。

選択クエリからすべての値を割り当てたい。

コードは次のとおりです。

DECLARE @l_profiel int;
DECLARE c1 CURSOR  
FOR select p.ProfielID 
from DIM_Profiel p,DIM_EmployeeKopie1 e1,employee e
where e1.EmpidOrigineel = e.emplid and e.profile_code = p.Prof_Code
for update of e1.FK_Profiel;
open c1;
FETCH NEXT FROM c1 into @l_profiel
WHILE @@FETCH_STATUS = 0
BEGIN
SET NOCOUNT ON;
        UPDATE DIM_EmployeeKopie1
        set FK_Profiel = @l_profiel
        where current of c1

end

close c1;
deallocate c1;

助けてください、thx。

4

4 に答える 4

11

FETCH NEXTループに追加するのを忘れました。

ただし、これにはカーソルはまったく必要ありません。

これを試して:

UPDATE  e1
SET     FK_Profiel = p.ProfielID
FROM    DIM_EmployeeKopie1 e1
JOIN    employee e
ON      e.emplid = e1.EmpidOrigineel
JOIN    DIM_Profiel p
ON      p.Prof_Code = e.profile_code
于 2011-04-20T14:33:56.080 に答える
4

まず第一に、これには は必要ありません。それなしでCURSOR実行できます。UPDATEまたJOINS、暗黙的なものではなく明示的なものを使用する必要があります。次のことを試してください。

UPDATE e1
SET FK_Profiel = p.ProfielID
FROM DIM_EmployeeKopie1 e1
JOIN employee e
ON e1.EmpidOrigineel = e.emplid
JOIN DIM_Profiel p
ON e.profile_code = p.Prof_Code
于 2011-04-20T14:36:17.787 に答える
1
DECLARE @employee_id INT 
DECLARE @getemployee_id CURSOR 

SET @getemployee_id = CURSOR FOR 
    SELECT employee_id 
    FROM employment_History

OPEN @getemployee_id
FETCH NEXT FROM @getemployee_ID 
INTO @employee_ID 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT @employee_ID 
    FETCH NEXT FROM @getemployee_ID 
    INTO @employee_id 
END 

CLOSE @getemployee_ID 
DEALLOCATE @getemployee_ID
于 2012-07-09T14:06:29.917 に答える
-1
This is the simplest example of the SQL Server Cursor. I have used this all the time for any use of Cursor in my T-SQL.

DECLARE @AccountID INT
DECLARE @getAccountID CURSOR
SET @getAccountID = CURSOR FOR
SELECT Account_ID
FROM Accounts
OPEN @getAccountID
FETCH NEXT
FROM @getAccountID INTO @AccountID
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @AccountID
FETCH NEXT
FROM @getAccountID INTO @AccountID
END
CLOSE @getAccountID
DEALLOCATE @getAccountID
于 2012-04-13T09:19:48.737 に答える