【发布时间】:2020-05-17 01:16:59
【问题描述】:
以下代码应该打印临时表#table_A中包含的所有行:
create table #table_A
(
ID int NULL ,
foo int NULL
)
go
insert into #table_A values (1, 2)
insert into #table_A values (2, 3)
go
declare c_table_A cursor
for select *
from #table_A
order
by 1
open c_table_A
fetch c_table_A
while @@sqlstatus = 0
begin
print '%1!', c_table_A
fetch c_table_A
end
close c_table_A
go
但是,它会导致以下错误消息:
DECLARE CURSOR must be the only statement in a query batch.
如何打印(临时)表中包含的所有行?
这是我提出问题的另一种方式:
我正在尝试做类似的事情:
open c_table_A
fetch c_table_A into @record_variable
while @@sqlstatus = 0
begin
print '%1!', @record_variable
fetch c_table_A into @record_variable
end
close c_table_A
有没有办法在sybase中声明一个包含整行表的变量?
P.S.:仅使用“select * from ...”对我不起作用。在打印行之前,我需要对每一行做一些事情。 (我的问题应该集中在基本部分,这就是为什么我没有详细说明我需要对每一行做的其他事情)
【问题讨论】:
-
在“open”之前单独放置一个“go”。
-
一旦你添加了
go(根据Richard的评论),你需要修复fetch命令,你需要将光标列获取到@variables,然后你需要将那些@variables提供给print命令;但是看看你如何(有效地)用一个简单的select * from ...(即,不需要游标、循环或print)完成同样的事情,我的主要问题是......你真正想要完成什么? -
我会做“从#table_A中选择*”(然后是go)。这里不需要光标。
-
我知道我可以将列保存到变量中,然后打印变量......但在我的应用程序中,我正在处理一个由其他几个表组成的大型临时表。将每一列保存在一个变量中会很麻烦。因此,我想将整行保存到一个“行变量”中
-
@markp 查看我更新的帖子