无法将游标提取到表变量中



我正在尝试将表的每条记录作为游标获取并将其放入自定义表变量中。我使表变量中的数据类型与查询结果相同。 但它似乎不起作用。波纹管是我正在尝试的代码。

不起作用:

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查询方面不是很有经验。任何帮助将不胜感激。

更新:

正如其他人所问的那样,我将通过举个例子来解释我想要在这里实现的目标。如果我完全使用了错误的方法,请告诉我。

好吧,假设我有以下这些表-

问题

( 高清 标题 德斯克 )

标签表 ( 高清 名字 德斯克 )

所以

对于问题表中的每个问题,我想在标签表中搜索匹配的标签(可能不止一个),并将问题标签映射数据插入另一个临时表中。我已经定义了所有函数来检查特定 TAG 是否对特定问题有效。我遇到的问题是逐条记录遍历问题表,并根据当前记录搜索标签表。需要明确的是,没有办法连接这两个表,因为这两个表都保存不同类型的数据。

我希望这个例子能向您清除问题陈述。

如果您尝试解决的实际问题是如何用 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中的每一行调用函数,然后使用结果填充数据集。

最新更新