一个sybase比较入门级的问题

时间:2022-08-04 00:26:56
我这边是sybase iq数据库,需要根据输入的参数,动态declare变量,大概地做法是 :1.传入或设置一个变量的值int 为6,然后根据接收的6,动态生成参数 declare a char(20),b char(20),c....,f char(20),6个参数,分别去接收一个表中查出来的6个参数。

3 个解决方案

#1


前面的生成一个int 型变量已经实现,和后面把一个表的6个字段赋给这个6个变量也实现,就是中间的根据int型生成不同个数变量,我搜索了下,好像sql没有这种写法,我用 @sql=‘declare ' 方法 (
declare @j_i_f int,
@j_i_f_char char(20),
@j_name char(40),
@sql char(2000)
select @j_i_f=1
select @j_name='a'
select @j_i_f_char=convert(char,@j_i_f)
set  @sqlcmd='declare @'+@j_name+@j_i_f_char+' char(20)'
execute(@sql)
select @a1 

返回结果  column ’@a1‘ not found 

#2


为什么要动态定义变量呢?
定义的变量在execute()执行后, 你也访问不了。
语句要改成E-SQL的形式:
begin
declare @j_i_f int,
@j_i_f_char char(20),
@j_name char(40),
@sql char(2000);
select @j_i_f=1;
select @j_name='a';
select @j_i_f_char=convert(char,@j_i_f);
set  @sqlcmd='declare @'+@j_name+@j_i_f_char+' char(20)';
execute(@sql);
select @a1;
end

#3


好的,我这边又执行了下  打分号的那一行 显示 Syntax error near ‘;’ on line 8

#1


前面的生成一个int 型变量已经实现,和后面把一个表的6个字段赋给这个6个变量也实现,就是中间的根据int型生成不同个数变量,我搜索了下,好像sql没有这种写法,我用 @sql=‘declare ' 方法 (
declare @j_i_f int,
@j_i_f_char char(20),
@j_name char(40),
@sql char(2000)
select @j_i_f=1
select @j_name='a'
select @j_i_f_char=convert(char,@j_i_f)
set  @sqlcmd='declare @'+@j_name+@j_i_f_char+' char(20)'
execute(@sql)
select @a1 

返回结果  column ’@a1‘ not found 

#2


为什么要动态定义变量呢?
定义的变量在execute()执行后, 你也访问不了。
语句要改成E-SQL的形式:
begin
declare @j_i_f int,
@j_i_f_char char(20),
@j_name char(40),
@sql char(2000);
select @j_i_f=1;
select @j_name='a';
select @j_i_f_char=convert(char,@j_i_f);
set  @sqlcmd='declare @'+@j_name+@j_i_f_char+' char(20)';
execute(@sql);
select @a1;
end

#3


好的,我这边又执行了下  打分号的那一行 显示 Syntax error near ‘;’ on line 8