Quantcast
Channel: SQLParty »题炼
Viewing all articles
Browse latest Browse all 5

执行动态SQL语句查询,并输出参数

$
0
0

在SQLServer下,输出执行一个动态查询语句,并把语句中的@incategory的结果输出。语句如下:

declare @id int ;
declare @sqlexec nvarchar(3000) ;
declare @category varchar(500);
declare @tabl varchar(500);
set @id=1;
set @tabl='test4';

SET @sqlexec='SELECT @incategory=category FROM '
		 + @tabl
         + ' WHERE slno='
         + cast(@id as varchar(32));
EXEC sp_executesql @sqlexec,N'@incategory varchar(500) output',@incategory=@category output ;

SET @category=@category+'NOTEND';

IF @id >3
BEGIN
....
END

现在要用mysql来实现这样的动态查询,并也要有个输出结果,怎样处理?

本题主要考察MySQL用户定义变量和动态SQL的用法。MySQL中用户定义变量可以直接通过set来声明和赋值。set @a=1;等价于set @a:=1,但是select @a:=col1 from t1不能用@a=col,因为后者变成了判断条件。

而MySQL中使用动态SQL,包括三部分SQL语句:

  1. prepare 预备语句,便于后面执行
  2. execute 执行prepare好的语句
  3. deallocate prepare 释放prepare好的语句

针对本题内容,结合变量和动态SQL,可以如下:

set @id:=1;
set @tabl:='test4';
set @sqlexec:=concat('select @category:=category from ',@tabl,' where slno=',cast(@id as char));
prepare stmt1 from @sqlexec ;
execute stmt1;
deallocate prepare stmt1 ;

/*@category这里就可以直接使用*/
SET @category:=concat(@category,'NOTEND');
...

The post 执行动态SQL语句查询,并输出参数 appeared first on SQLParty.


Viewing all articles
Browse latest Browse all 5

Trending Articles