0
我有一个使用游标将数据插入到我的数据库的查询。奇怪的是查询第一次运行(SSMS> Execute),但是如果我第二次运行它,带有游标的部分不会执行。TSQL光标的结果不一致
但是 - 如果我然后打'调试'我可以调试和整个查询执行得很好。在此之后,它再次正常工作,然后再次只执行第一个插入脚本。
我试过FAST_FORWARD,提到here但这似乎并不能解决问题。有什么建议么?
/** 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)
事实上,光标内插入未运行。
更好的解决方案:完全避免杂乱的那个光标! :-) –
@marc_s - 你如何建议我这样做? –
只是一个'INSERT INTO ..... SELECT ..... FROM .....' - 根本不需要光标 –