2011-02-05 46 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