来自TSQL游标的结果不一致

时间:2012-10-18 11:14:00

标签: sql-server-2008 tsql cursor

我有一个使用游标将数据插入数据库的查询。奇怪的是,查询第一次运行(SSMS> Execute),但是如果我第二次运行它,则光标的部分不会执行。

然而 - 如果我然后点击'debug'我可以调试并且整个查询执行得很好。之后,它再次正常工作,然后再次只执行第一个插入脚本。

我按照提到的here尝试了FAST_FORWARD,但这似乎无法解决问题。有什么建议吗?

/** Declarations **************************************************/
DECLARE @TemplateFileName varchar(200)
DECLARE @TemplatePreviewFileName varchar(200)
DECLARE @TemplateId int
DECLARE @CompanyId int
DECLARE CompanyCursor cursor FAST_FORWARD FOR SELECT [CmpId] from SetCompany
/******************************************************************/

/** Set template name here ****************************************/
SET @TemplateFileName           = 'Template_2'
SET @TemplatePreviewFileName    = 'Template_2'
/******************************************************************/

/******************************************************************/
INSERT INTO ... etc
SET @TemplateId = @@IDENTITY;
Open CompanyCursor

WHILE @@FETCH_STATUS = 0
    BEGIN       
        IF(@CompanyId IS NOT NULL)
        BEGIN
            PRINT 'Adding template ' + @TemplateFileName + ' with id ' + convert(varchar, @TemplateId) + ' to company ' + convert(varchar, @CompanyId);
            INSERT INTO .... etc
            PRINT 'OK';
        END
        Fetch NEXT FROM CompanyCursor INTO @CompanyId
END
CLOSE CompanyCursor;
DEALLOCATE CompanyCursor;

运行'第一次',我得到:

(1 row(s) affected)
Adding template Template_2.frx with id 2272 to company 10

(1 row(s) affected)
OK
Adding template Template_2.frx with id 2272 to company 11

(1 row(s) affected)
OK
Adding template Template_2.frx with id 2272 to company 12

(1 row(s) affected)
OK
Adding template Template_2.frx with id 2272 to company 13

(1 row(s) affected)
OK
Adding template Template_2.frx with id 2272 to company 14

(1 row(s) affected)
OK

第二次,只有这个:

(1 row(s) affected)

实际上,光标内的插入没有运行。

1 个答案:

答案 0 :(得分:3)

Open CompanyCursor

添加

FETCH NEXT FROM CompanyCursor
INTO @CompanyId