2011-02-05 6 views
1

に基づくSQL Serverの更新順序付きクエリからx行の行を使用してSQLテーブルを更新しようとしています。ここで、xは100000の残高です。私はROWCOUNTを使用してxがパラメータであるために結果の数を制限していますが、これはうまくいかないと思います。ネストされたSELECTに基づいたTOP

誰かがカーソルなしで修正や代替案を提案することはできますか?

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は、おかげでGBNあなたは一時テーブルをロードする場合は、あなたが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

ステップ

誤解を招くことができますあまりにので、中間結果に適用され、私が持っていましたテーブル変数を調べ始めましたが、上記の作業をすることができると考えました。あなたのソリューションは完璧です。 –

関連する問題