我有一個遊標,我想通過一個臨時表循環,並將每個記錄合併到另一個表中。光標沒有正確循環
我不能得到這個遊標只是爲了遍歷記錄並返回一個計數。
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行,等等等等
如果你說'SQL'但真的意味着Microsoft ** SQL Server **那麼 - 爲什麼地球上你用*遊標*做這個?遊標是不好的,遊標是邪惡的,遊標是** RBAR **(逐行排列)並且幾乎沒有真正需要......你使用的是什麼**版本的SQL Server?查看例如MERGE'語句(在SQL Server ** 2008或更新的版本上可用) –
您不應該像SQL中的C#或VB.NET那樣執行**順序處理** - 您應該[學會用**思考**設置**並使用基於集合的操作](http://www.simple-talk.com/sql/database-administration/the-road-to-professional-database-development-set-based-thinking/)而不是遊標...... –
我需要在數據合併時生成異常......我如何訪問合併語句中的每一行? – user1236803