次のクエリを使用しています。 しかし、それはトップ1000の行を転送するだけです。私はもっと多くの行を持っています。 where not exists
句を削除すると、完全なデータが取得されます。どこが間違っているのか教えていただけますか?トップ100行のみを挿入するクエリ
DECLARE @BatchSize INT = 1000
DECLARE @Counter INT = 0
DECLARE @TableCount INT = 0
set @TableCount = (select count(*) from Table2)
while @Counter < (@TableCount/@BatchSize+1)
BEGIN
INSERT INTO Table1
SELECT * FROM Table2 MH
inner join Table3 M
on MH.Mid = M.Mid
WHERE NOT EXISTS (
SELECT * FROM Table1
where MH.otherid = M.otherid
)
order by id OFFSET (@BatchSize * @Counter)ROWS FETCH NEXT @Batchsize ROWS ONLY;
SET @[email protected]+1
END
1000行を挿入するのはなぜですか?
*なぜこのようにクエリを実行していますか?一度に完全なクエリを発行するだけではいかがですか? –
簡単な間違い( 'WHERE NOT EXISTS'句の元の形式)のために、なぜ「トップ1000行を挿入するのはなぜですか?」という質問はもはや有効ではないので、この質問を閉じるために投票します。 –
私は何百万というデータを持っており、テーブル全体をロックしたくないです。 –