Sybase IQ 动态查询的一个示例

4716阅读 0评论2012-03-09 lion_sybiq_127
分类:Sybase

   在开发应用时,有时需要使用动态sql以实现某种灵活性。下面给出了一个在IQ中的实现动态SQL的示例,这个例子基于IQ Demo数据库:
 
begin
    declare @sqlString varchar(100);
    declare @tableName varchar(100);
    set @tableName = 'emp1';
    set @sqlString = 'select top 2 * from  ' + @tableName + ' order by salary';   
    execute immediate with result set on @sqlString;
end;
   说明:在IQ中,执行动态sql语句是通过execute immediate语句实现的。如果执行的语句返回结果集,必须增加 "with result set on"子句,否则在运行时会报“Result set not permitted in '' ” 错误。
 
    下面是一个不返回结果集的例子(在存储过程中使用动态sql):
create procedure crt_tabs_proc(in @tableNamePrifix varchar(30),in @tableCount int)
begin
    declare @loopCounter int;
    declare @sqlString varchar(100);
    set @loopCounter = 1;
    while @loopCounter <= @tableCount loop
      set @sqlString = 'create table ' + @tableNamePrifix + '_' + cast(@loopCounter as varchar(10)) + '(col1 int, col2 char(8),col3 char(8))';  
      set @loopCounter = @loopCounter +1;
      execute immediate @sqlString;
    end loop;
end;
   
    说明:上面的例子实现了创建指定个数和指定表名前缀的功能。由于create table 并不返回结果集,所以使用execute immediate @sql的方式执行动态sql。
 
    在看另一个例子:
begin
    declare @sqlString varchar(100);
    declare @tableName varchar(100);
    set @tableName = 'table01' + dateformat(dateadd(hh,-1,now()),'mmddhh');
    set @sqlString = 'select top 1 * from  ' + @tableName + ' order by salary';
    execute immediate with result set on @sqlString;
    --execute immediate @sql_text
end;
上一篇:IQ 数据库创建时的IQ PAGE SIZE选择
下一篇:通过Open Client E-SQL/C 调用IQ存储过程如何显示print语句的输出信息