2011-02-05 56 views
1

我想从一个有序查询,其中x是100000的平衡 - 以前的结果更新一个SQL表x行数。我使用ROWCOUNT来限制由于x为参数而导致的结果数量,但不认为这有效。基于嵌套SELECT与TOP SQL Server 2000更新

任何人都可以建议一个修复或替代没有游标?

DECLARE @Top int 
SET @Top = 100000 - @CountRecords 

SET ROWCOUNT @Top 

UPDATE 
    UpdateTable 
SET 
    UpdateField = 'SomeValue' 
WHERE 
    Id IN 
    (
     SELECT 
      TOP 100% Id 
     FROM 
      SelectTable 
     WHERE 
      (SelectField1 IS NULL) AND 
        (SelectFieldDate IS NOT NULL) 
      ORDER BY 
        SelectFieldDate       
    ) 

SET ROWCOUNT 0 

回答

2

SET ROWCOUNT适用于中间结果也因此可能会产生误导

如果加载一个临时表,您可以通过更新分成2绕过这个步骤

DECLARE @Top int 
SET @Top = 100000 - @CountRecords 

SET ROWCOUNT @Top 

SELECT Id 
INTO #foo 
FROM 
    SelectTable 
WHERE 
    (SelectField1 IS NULL) AND 
      (SelectFieldDate IS NOT NULL) 
ORDER BY 
    SelectFieldDate     

SET ROWCOUNT 0 

UPDATE 
    UpdateTable 
SET 
    UpdateField = 'SomeValue' 
WHERE 
    Id IN 
    (
     SELECT id FROM #foo 
    ) 
+0

感谢GBN,我有开始看一个表变量,但认为我可以做出上述工作。你的解决方案是完美的 – 2011-02-06 09:51:39