Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 来自TSQL游标的结果不一致_Sql Server 2008_Tsql_Cursor - Fatal编程技术网

Sql server 2008 来自TSQL游标的结果不一致

Sql server 2008 来自TSQL游标的结果不一致,sql-server-2008,tsql,cursor,Sql Server 2008,Tsql,Cursor,我有一个查询,它使用光标将数据插入数据库。奇怪的是,查询第一次运行(SSMS>Execute),但是如果我第二次运行它,带有光标的部分就不会执行 然而,如果我点击'debug',我就可以调试,整个查询执行得很好。在这之后,它再次正常工作,然后,再次,仅执行第一个插入脚本 我尝试了前面提到的快进,但似乎没有解决问题。有什么建议吗 /** Declarations **************************************************/ DECLARE @Templat

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

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

我尝试了前面提到的快进,但似乎没有解决问题。有什么建议吗

/** 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)
事实上,光标内的插入没有运行。

之后

Open CompanyCursor

之后


感谢这就解决了问题。但是为什么它第一次运行呢?谢谢!这就解决了问题。但是为什么它会第一次运行呢?更好的解决方案是:完全避免那个凌乱的光标!:-)@marc_s-你建议我怎么做?只需在….中插入一个
。。。。。选择。。。。。FROM…
-无需在所有位置使用光标,甚至更好的解决方案:完全避免使用凌乱的光标!:-)@marc_s-你建议我怎么做?只需在….中插入一个
。。。。。选择。。。。。FROM…
-根本不需要光标
FETCH NEXT FROM CompanyCursor
INTO @CompanyId