2010-10-26 17 views
0

我的问题是,这个sproc中的最后一个查询是说我需要声明@N,但我已经有任何想法?为什么此查询要求我在已有表格时声明表格?

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 

回答

2

没有参考在更新查询@n。您将需要使用子查询做你的更新,或以“从”条款(如果这是SQL Server)的

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

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

第二个查询为我做了非常感谢。 – 2010-10-26 14:41:33

1

您需要将表放到WHERE子句中。

例如:

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

你@n声明,但它是一个表,并且不在Update子句中使用。您需要以某种方式将其添加到Update子句,或者您需要将其更改为不是表格。

UPDATE Tasks 
SET StepNum = @n.Count 
FROM Tasks 
JOIN @n on Tasks.SmpInstanceID = @n.smpinstanceid 
相关问题