2017-07-27 1 views
1

colonnes TBMEMBERInsérer une colonne dans une autre table temptable

id,name,employeeno,userno,amount1,amount2,type,status 

colonnes TBDEDUCT

id,idno,employeeno,date,name,amount,status 

TBITEMS

id,employeeno,userno,itemname,amount,status 

SYNTAX

DECLARE memberlist CURSOR FOR SELECT id from TBMEMBER a where Status ='A' and Type = 'R' 
and employeeno not in (select EmployeeNo from TBRESIGN where (txstatus='5' OR txstatus ='7' or txstatus='4') and EmployeeNo = a.EmployeeNo) 

DECLARE @itemamt as decimal 
select top 0 * 
into #tempmember 
from TBMEMBER 

OPEN memberlist 
    FETCH NEXT FROM memberlist 
    INTO @id 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 

     INSERT INTO #tempmember SELECT * FROM TBMEMBER where id [email protected] 
     select @itemamt = sum(amount) from TBITEMS where employeeno = #tempmember.employeeno and status = '9' 
     insert into #TBDEDUCT values (#tempmember.userno,#tempmember.EmployeeNo,getdate(),#tempmember.name,#tempmember.amount1,'P') 
     insert into #TBDEDUCT values (#tempmember.userno,#tempmember.EmployeeNo,getdate(),#tempmember.name,#tempmember.amount2,'P') 
     insert into #TBDEDUCT values (#tempmember.userno,#tempmember.EmployeeNo,getdate(),#tempmember.name,#[email protected],'P') 
     DELETE FROM #tempmember 
    END 

Je suis en train d'insérer des valeurs dans tbdeduct de temptable mais il me donne une erreur:

The multi-part identifier "#tempmember.SLAIdNo" could not be bound. 
+0

Je devais insérer 3 fois par membre avec des valeurs différentes –

+1

Encore, vous n'avez pas besoin d'un curseur. Fournir quelques exemples de données et le résultat attendu. –

+0

Quelles sont les structures de #tempmember et #tbdeduct? –

Répondre

1

Vous devez déclarer des variables pour les autres colonnes et attribuer les valeurs dans la déclaration FETCH. Utilisez ces variables dans l'instruction INSERT au lieu d'utiliser le table.columname. Cependant, vous n'avez pas besoin d'utiliser un CURSOR pour cela. Voici une façon:

WITH CteTBMember AS(-- Rows from your CURSOR 
    SELECT tm.* 
    FROM TBMEMBER tm 
    WHERE 
     tm.Status ='A' 
     AND tm.Type = 'R' 
     AND tm.employeeno NOT IN (
      SELECT EmployeeNo 
      FROM TBRESIGN 
      WHERE 
       (txstatus='5' OR txstatus ='7' or txstatus='4') 
       AND EmployeeNo = a.EmployeeNo 
     ) 
) 
INSERT INTO #TBDEDUCT 
SELECT 
    tm.idNo, 
    tm.EmployeeNo, 
    GETDATE(), 
    tm.name, 
    x.amount, 
    'P' 
FROM CTeTbMember tm 
CROSS APPLY(-- 3 types of amount to be inserted 
    SELECT tm.amount1 UNION ALL 

    SELECT tm.amount2 UNION ALL 

    SELECT SUM(amount) 
    FROM TBITEMS ti 
    WHERE 
     ti.employeeno = tm.employeeno 
     AND ti.status = '9' 
) x(amount); 
+0

Comment est-ce que j'insère une autre croix s'applique avec aucune table de source? Par exemple, je veux juste changer la valeur 'P' en 'U', 'S', 'P' –