0

ステージングテーブルをループして、各レコードを別のテーブルにマージするカーソルがあります。

レコードをループしてカウントを返すためだけにこのカーソルを取得することはできません。

DECLARE @curCatalogID int
DECLARE @curNomenclature varchar(200)
DECLARE @curMainCategory varchar(200)
DECLARE @curSubCategory varchar(200)
DECLARE @curManufacturer varchar(200)
DECLARE @curModelNo varchar(200)
DECLARE @curPrice varchar(200)
DECLARE @curProductDesc varchar(2000)
DECLARE @curImage varchar(200)
DECLARE @curPDFName varchar(200)
DECLARE @curInventory varchar(200)
DECLARE @curBatchID int
DECLARE @curAuditID int

DECLARE @nCnt int
SET @nCnt = 0

DECLARE import_loop CURSOR FOR
SELECT * FROM tblCatalogStaging

OPEN import_loop
FETCH NEXT FROM import_loop 
INTO    @curCatalogID,
        @curNomenclature,
        @curMainCategory,
        @curSubCategory,
        @curManufacturer,
        @curModelNo,
        @curPrice,
        @curProductDesc,
        @curImage,
        @curPDFName,
        @curInventory,
        @curBatchID,
        @curAuditID

WHILE @@FETCH_STATUS = 0
BEGIN

SET @nCnt = @@ROWCOUNT;

        FETCH NEXT FROM import_loop 
        INTO    @curCatalogID,
        @curNomenclature,
        @curMainCategory,
        @curSubCategory,
        @curManufacturer,
        @curModelNo,
        @curPrice,
        @curProductDesc,
        @curImage,
        @curPDFName,
        @curInventory,
        @curBatchID,
        @curAuditID

END
CLOSE import_loop
DEALLOCATE import_loop

SELECT @nCnt

2036の1つの値(ステージングテーブルの行数)を返す必要がありますが、影響を受けた2036行、影響を受けた4072行などのように戻ってきます。

4

3 に答える 3

2

@@ROWCOUNT が CURSOR 内で使用されることを意図しているのかどうかはわかりません。

あなたはより良い運を持っているかもしれません:

DECLARE @nCnt INT
SET @nCnt = 0
...
SET @nCnt = @nCnt + 1;

注: 行の挿入/更新でこの検証を行うには、おそらく TRIGGER が適切な場所です。検証を時々実行したい場合を除きます。(また、発生するのは SQL エラーであり、例外ではありません)

于 2012-07-02T19:54:35.563 に答える
0

@@ Rowcountは、最後に実行されたstatemenetの影響を受けた行数を提供します。これはあなたが望んでいることではないと思います。カウンター変数を使用することについてはebyrobに同意します。

しかし、それは本当にカーソルでこれを行う必要がある場合です。marc_sが示唆しているように、セットを使用するように実際の手順を作り直すことをお勧めします。それが不可能であり、応答で述べたように、ループ内の例外に対処する必要がある場合は、そのトピックに関するPhilFactorsの最近の記事を参照することをお勧めします。

于 2012-07-02T20:09:56.537 に答える
0

これほど単純かどうかはわかりませんが、欲しいだけですか:

select count (*) FROM tblCatalogStaging
于 2012-07-02T19:34:45.507 に答える