我有一个游标,我想通过一个临时表循环,并将每个记录合并到另一个表中。光标没有正确循环
我不能得到这个游标只是为了遍历记录并返回一个计数。
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