无法将光标移入表变量

时间:2017-05-25 06:55:35

标签: sql sql-server

我正在尝试将表的每条记录作为游标获取并将其放入自定义表变量中。我保留了表变量中的数据类型与查询结果相同。 但它似乎没有奏效。贝娄是我正在尝试的代码。

不起作用:

DECLARE @MyCursor CURSOR;
DECLARE @r_field int;
DECLARE @r_DataSet TABLE
    (
        ID int,
        Full_Name nVarChar(max)
    );

BEGIN
    SET @MyCursor = CURSOR FOR
    select ID, custom_name as Full_Name from Students
    where isDeleted = 0

    OPEN @MyCursor 

    FETCH NEXT FROM @MyCursor 
    INTO @r_DataSet

    WHILE @@FETCH_STATUS = 0
    BEGIN
            --------------------------

            --Some code

            --------------------------

     FETCH NEXT FROM @MyCursor 
      INTO @r_DataSet 
    END; 

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END;

此代码给出了这个错误“必须声明标量变量”@r_DataSet“。

虽然当我只用一个没有表变量的字段来尝试时它确实有效。

使用:

DECLARE @MyCursor CURSOR;
DECLARE @r_field int;
DECLARE @r_DataSet TABLE
    (
        ID int,
        Full_Name nVarChar(max)
    );

BEGIN
    SET @MyCursor = CURSOR FOR
    select ID from Students
    where isDeleted = 0

    OPEN @MyCursor 

    FETCH NEXT FROM @MyCursor 
    INTO @r_field

    WHILE @@FETCH_STATUS = 0
    BEGIN
            --------------------------

            --Some code

            --------------------------

     FETCH NEXT FROM @MyCursor 
      INTO @r_field 
    END; 

    CLOSE @MyCursor ;
    DEALLOCATE @MyCursor;
END;

我对T_SQL查询不是很有经验。任何帮助将不胜感激。

更新:

正如其他人所问,我将通过举例说明我想要实现的目标。如果我使用错误的方法,请告诉我。

好吧,说我有以下表格 -

问题

(     ID,     标题,     DESC )

TAGS 表 (     ID,     名称,     DESC )

所以,

对于问题表中的每个问题,我想在标记表中搜索匹配的标记(可能不止一个)并插入问号标记映射数据在另一个临时表中。我已经定义了所有函数来检查特定TAG是否对特定QUESTION有效,或者不是。我遇到的问题是按记录遍历问题表记录,并根据当前记录搜索标记表。为了清楚起见,没有办法加入这两个表,因为这两个表都包含不同类型的数据。

我希望这个例子能够解决问题陈述。

1 个答案:

答案 0 :(得分:2)

如果您要解决的实际问题是如何使用select语句的结果填充@r_DataSet,解决方案非常简单:

DECLARE @r_DataSet TABLE
    (
        ID int,
        Full_Name nVarChar(max)
    );

insert into @r_DataSet
select ID, custom_name as Full_Name from Students
where isDeleted = 0

更新

如果表之间的关系由SQL函数中的代码而不是数据确定,则可以使用CROSS APPLYSELECT中的每一行调用函数,然后使用结果填充你的数据集。