首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL脚本游标、变量和NPoco

SQL脚本游标、变量和NPoco
EN

Stack Overflow用户
提问于 2016-11-17 14:46:47
回答 2查看 445关注 0票数 0

我有一个包含声明为DECLARE @@var_1 as bigint的变量的SQL脚本,它包含一个while循环作为WHILE @@FETCH_STATUS,现在使用NPoco执行这样的脚本会引发Must declare the scalar variable "@FETCH_STATUS".异常,我该如何解决它?主要目的是在SQL Server和ORACLE中使用相同的脚本。

代码语言:javascript
复制
DECLARE @@LayerId bigint;
DECLARE @@DId as bigint;
DECLARE @@DataSegment as CURSOR;
DECLARE @@IterationNo as int;

IF OBJECT_ID(N'DataSegment') IS NOT NULL AND
   OBJECT_ID(N'Layer') IS NOT NULL
BEGIN
    SET @@IterationNo = 0;
    SET @@DataSegment = CURSOR FORWARD_ONLY FOR
    SELECT Id FROM DataSegment  

    OPEN @@DataSegment;
    FETCH NEXT FROM @@DataSegment INTO @@DId
    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET  @@IterationNo = @@IterationNo + 1;
        SET  @@LayerId = 9;
        PRINT @@LayerId;


    --Insert parent RouteVersion
        INSERT INTO Layer Values(@@LayerId,'Migration',6,'Trace',
        'Route','TEST', @@DId, NULL, @@LayerId, 9)   
             Print 'Iter is ' ;
        Print @@IterationNo

     --fetch next
         FETCH NEXT FROM @@DataSegment INTO @@DId;
    END
    CLOSE @@DataSegment;
    DEALLOCATE @@DataSegment;

END

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-11-17 15:50:33

尝尝这个

代码语言:javascript
复制
DECLARE @LayerId bigint;
DECLARE @DId as bigint;
DECLARE @DataSegment as CURSOR;
DECLARE @IterationNo as int;

IF OBJECT_ID(N'DataSegment') IS NOT NULL AND
   OBJECT_ID(N'Layer') IS NOT NULL
   BEGIN
SET @IterationNo = 0;
SET @DataSegment = CURSOR FORWARD_ONLY FOR
SELECT ID FROM DataSegment    

OPEN @DataSegment
FETCH NEXT FROM @DataSegment INTO @DId

WHILE (@@FETCH_STATUS = 0)
BEGIN
    SET  @IterationNo = @IterationNo + 1;
    SET  @LayerId = 9;
    PRINT @LayerId;


Insert parent RouteVersion
    INSERT INTO Layer Values(@LayerId,'Migration',6,'Trace',
    'Route','TEST', @DId, NULL, @LayerId, 9)   
         Print 'Iter is ' ;
    Print @IterationNo

     FETCH NEXT FROM @DataSegment INTO @DId;
END
CLOSE @DataSegment;
DEALLOCATE @DataSegment;
END

将.net连接设置更改为

Database=db;Data Source=localhost;User Id=root;Password=pass;Allow User Variables=True

然后尝试你自己的代码

票数 0
EN

Stack Overflow用户

发布于 2020-01-07 14:22:12

对于系统参数,请使用@而不是@@

代码语言:javascript
复制
DECLARE @LayerId bigint;
DECLARE @DId as bigint;
DECLARE @DataSegment as CURSOR;
DECLARE @IterationNo as int;

IF OBJECT_ID(N'DataSegment') IS NOT NULL AND
   OBJECT_ID(N'Layer') IS NOT NULL
   BEGIN
SET @IterationNo = 0;
SET @DataSegment = CURSOR FORWARD_ONLY FOR
SELECT ID FROM DataSegment    

OPEN @DataSegment
FETCH NEXT FROM @DataSegment INTO @DId

WHILE (@@@FETCH_STATUS = 0)
BEGIN
    SET  @IterationNo = @IterationNo + 1;
    SET  @LayerId = 9;
    PRINT @LayerId;


Insert parent RouteVersion
    INSERT INTO Layer Values(@LayerId,'Migration',6,'Trace',
    'Route','TEST', @DId, NULL, @LayerId, 9)   
         Print 'Iter is ' ;
    Print @IterationNo

     FETCH NEXT FROM @DataSegment INTO @DId;
END
CLOSE @DataSegment;
DEALLOCATE @DataSegment;
END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40648353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档