2010-10-26 1 views
0

Mon problème est que la dernière requête de ce sproc dit que je dois déclarer @N mais j'ai déjà des idées?Pourquoi cette requête me demande-t-elle de déclarer la table quand je l'ai déjà?

DECLARE @t TABLE 
    (Smpinstanceid UNIQUEIDENTIFIER) 

    INSERT INTO @t 

    (Smpinstanceid) 

    SELECT t.SmpInstanceid 
    FROM Tasks t 
    WHERE t.Completed IS NOT NULL and t.SmpInstanceID is not null 

DECLARE @N TABLE 
(SMPinstanceid UNIQUEIDENTIFIER,[Count] INT) 

INSERT INTO @N 
(SMPinstanceid,[COUNT]) 

    SELECT Smpinstanceid,COUNT (Smpinstanceid) AS [Count] 
         FROM @t 
         GROUP BY Smpinstanceid 




      UPDATE Tasks 
      SET StepNum = @n.Count 
      WHERE Tasks.SmpInstanceID = @n.smpinstanceid 
END 
GO 

Répondre

2

Il n'y a aucune référence à @n dans la requête de mise à jour. Vous devez faire votre mise à jour avec une sous-requête, ou avec un « de » clause (si cela est sql server)

update tasks 
    SET StepNum = (select Count from @n 
        where Tasks.SmpInstanceID = @n.smpinstanceid) 

ou

update tasks 
    set stepnum = n.count 
    from tasks 
    inner join @n as n 
     on (Tasks.SmpInstanceID = n.smpinstanceid) 
+0

La deuxième requête l'a fait pour moi merci beaucoup. –

1

Vous devez placer la table dans votre clause WHERE quelque part.

Par exemple:

UPDATE T 
SET StepNum = n.[Count] 
FROM Tasks T 
INNER JOIN @n n ON n.SmpInstanceId = T.SmpInstanceId 
0

Vous avez @n déclaré, mais il est un table, et n'étant pas utilisé dans la clause Update. Vous devez l'ajouter à la clause Update d'une manière ou d'une autre, ou vous devez la changer pour ne pas être une table.

UPDATE Tasks 
SET StepNum = @n.Count 
FROM Tasks 
JOIN @n on Tasks.SmpInstanceID = @n.smpinstanceid