将游标变量传递给查询

时间:2012-07-24 18:36:16

标签: sql-server oracle tsql cursor

我是一名尝试学习T-SQL的Oracle开发人员。 我有一个表中有一列(table_name)。我需要能够遍历所有行并查找给定表的所有列。然后我需要将它的结果输出到文件中。 在Oracle中,以这种方式使用游标非常简单:

cursor my_curr is select table_name from my_table;
for x in my_curr loop
   select column_name from user_tab_columns
   where table_name = x.table_name;

   utl_file ..... (writing result to an OS file)
end loop;

T-SQL中的上述内容是什么?我如何使用游标变量将其传递给查询?

谢谢, 尤金

1 个答案:

答案 0 :(得分:1)

为列结果和游标声明一个变量。

declare @name varchar(100)
declare my_curr cursor 
for select table_name from my_table; 

打开光标

open my_curr  

将第一行取入变量

fetch from my_curr into @name

@@Fetch_Status是获取是否成功

while @@Fetch_Status=0
begin

使用从游标中获取的变量,与系统表进行比较以获取列。较新版本的SQL Server也可以使用Information_Schema,但这适用于所有版本

    select c.name from syscolumns c
         inner join sysobjects o on c.id = o.id
    where o.name = @name;  

   --utl_file ..... (writing result to an OS file) 

获取下一行

   fetch next from my_curr into @name

end 

处理光标

close my_curr
deallocate my_curr