我有一个游标,我想循环通过一个临时表,并将每个记录合并到另一个表。
我不能让这个光标只是循环记录并返回一个计数。
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
它应该只返回1的值2036(登台表中的行数),但我会回复受影响的2036行,受影响的4072行等等
答案 0 :(得分:2)
我不太确定@@ ROWCOUNT是否可以在CURSOR中使用。
你可能会有更好的运气:
DECLARE @nCnt INT
SET @nCnt = 0
...
SET @nCnt = @nCnt + 1;
注意:TRIGGER可能是在行插入/更新上进行此验证的正确位置。除非你真的只想要有时进行验证。 (另外,它会引发SQL错误,而不是异常)
答案 1 :(得分:0)
我不确定它是否像这样简单,但你只是想要:
select count (*) FROM tblCatalogStaging
答案 2 :(得分:0)
@@Rowcount提供受上一个要执行的statemenet影响的行数。我不认为这是你想要的,我同意ebyrob关于使用计数器变量。
但是,如果你真的需要在游标中执行此操作。 AS marc_s建议,你可能想要重新设计你的实际程序,以便它使用集合。如果这是不可能的,并且您需要,正如您在回复中所述,处理循环中的异常,您可能需要查看Phil Factors最近关于topic的文章。