在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语句:
- prepare 预备语句,便于后面执行
- execute 执行prepare好的语句
- 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.