在mysql 存储过程 变量中如何在order by 后面使用变量

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!存储过程中 变量怎么作为查询条件了_百度知道
存储过程中 变量怎么作为查询条件了
我有更好的答案
createprocupt_spasbegindeclare@name,declaremycurcursorforselectname,fromtablewhere.openmycurfetchnextfrommycurinto@name,beginupdatetable2setname=@name,where..fetchnextfrommycurinto@name,endclosemycurdeallocatemycurend
(1)这是一个存储过程gocreate proc Fenye@pageindex int, --用户要查询的页码@pagesize int, --每页几条@pagecount int output, --一共查询了多少页@recordcount int output --一共有多少条数据asbegin --把用户要的数据查询出来 --先把数据查询到临时表里面
select ID,Name,Sex into #linshibiao from Users
--再从临时表中进行分页查询
select * from
(select *,rn=ROW_NUMBER() over(order by ID asc) from Users) as t
where t.rn between (@pageindex-1)*@pagesize+1 and @pageindex*@pagesize
--2.设置 @pagecount @recordcount 的值
--计算总的记录条数
set @recordcount=(select COUNT(*) from #linshibiao);
--计算所有的页数
set @pagecount=CEILING(@recordcount*0.1/@pagesize)end(2)声明参数 并赋值 执行存储过程godeclare@pagecount int,@recordcount int--exec Fenye exec Fenye 1,2,3,5;
为您推荐:
其他类似问题
存储过程的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 7402|回复: 10
【讨论】存储过程里动态order by 能否不用动态sql实现
认证徽章论坛徽章:25
存储过程里动态:分配出库货位,有几种原则组合,
& && &按先进先出,按批号,按货位顺序,等等;
如果和客户确定了某种关系,那么就用固定的 ORDER BY 挺好;
但是如果客户可以自定义这种组合,那么就要做动态的
但是又不想用 动态 sql; 那么该用什么技巧实现呢;
就以上面3个条件为例;
共有:P(3,1)+P(3,2)+P(3,3)=3+6+6=15 种排列组合;
如果再考虑 desc ,那么排列组合就是:
& && &2*P(3,1)+Power(2,2)*P(3,2)+power(2,3)*P(3,3)=78 种组合;
如果不用动态语句,真的很难;
我猜测可能有技巧,比如case when 之类能够达到动态order by 的效果;
, , , , , , , , ,
论坛徽章:496
如果列顺序可以自由调换,那就只有动态。
认证徽章论坛徽章:25
呵呵,有newKid兄的权威说明,我就不去想了,就动态sql游标吧
招聘 : 论坛徽章:483
if …… then
也是可以的
认证徽章论坛徽章:25
能否把 3个条件的所有组合用一句sql搞定
& && &A AS (SELECT 'A' A FROM DUAL),
& && &B AS (SELECT 'B' B FROM DUAL),
& && &A AS (SELECT 'C' C FROM DUAL)
SELECT .... FROM&&....
能够把78种组合给遍历出来
& &&&A DESC,B,C
& &&&C,A ,B DESC
论坛徽章:496
qingyun 发表于
能否把 3个条件的所有组合用一句sql搞定
什么意思?要用SQL来生成动态SQL? 这当然可以,但既然是用户指定的,你干吗还要生成?
认证徽章论坛徽章:25
newkid 发表于
什么意思?要用SQL来生成动态SQL? 这当然可以,但既然是用户指定的,你干吗还要生成?
不是,就纯粹练练SQL 技巧
论坛徽章:18
本帖最后由 YuBinTAMU 于
09:57 编辑
qingyun 发表于
不是,就纯粹练练SQL 技巧
May be you can build a calulated column and order by it.
Assum the three columns in table inventory are:&&
&&FIFO#& &&&number ,&&-- 先进先出
&&Prod#& &&&number,&&-- 批号
&&Loca#& &&&number, -- 货位顺序
and the incoming parameters are ( column name only,&&no desc option) :
& &first_order_col_name& && &varchar2,
& &secnd_order_col_name& &varchar2 default null,
& &third_order_col_name& & varchar2 default null
then we can define a cursor to fecth the inventory:
CURSOR&&c_out_inventory IS
SELECT&&CASE&&first_order_colname when 'FIFO#' then FIFO#
& && && && && && && && && && && && && && && && && & when 'Prod#' then Prod#
& && && && && && && && && && && && && && && && && & when 'Loca#' then Loca#
& && && && && && && && && && && && && && && && && & else& && && && && && && & null
& && && && &&&END ||
& && && && &&&CASE&&second_order_colname when 'FIFO#' then FIFO#
& && && && && && && && && && && && && && && && && &&&when 'Prod#' then Prod#
& && && && && && && && && && && && && && && && && & when 'Loca#' then Loca#
& && && && && && && && && && && && && && && && && &else& && && && && && &&&null
& && && && &END ||
& && && && & CASE&&third_order_colname when 'FIFO#' then FIFO#
& && && && && && && && && && && && && && && && && && &when 'Prod#' then Prod#
& && && && && && && && && && && && && && && && && &&&when 'Loca#' then Loca#
& && && && && && && && && && && && && && && && && & else& && && && && && && &null
& && && && & END& && &&&order_factor,
& && && &&&inventory.*& &-- other columns
FROM inventory
order by order_factor;
论坛徽章:496
WITH COLS AS (
SELECT 1 col_id,'A' col_name FROM DUAL
UNION ALL SELECT 2 col_id,'B' col_name FROM DUAL
UNION ALL SELECT 3 col_id,'C' col_name FROM DUAL
SELECT SYS_CONNECT_BY_PATH(col_name||DECODE(n,2,' DESC'),',')
&&FROM cols,(SELECT 1 n FROM DUAL UNION ALL SELECT 2 FROM DUAL)
CONNECT BY NOCYCLE col_id&&PRIOR col_id
,A,B,C DESC
,A,C,B DESC
,A,B DESC,C
,A,B DESC,C DESC
,A,C DESC,B
,A,C DESC,B DESC
,B,A,C DESC
,B,C,A DESC
,B,A DESC,C
,B,A DESC,C DESC
,B,C DESC,A
,B,C DESC,A DESC
,C,A,B DESC
,C,B,A DESC
,C,A DESC,B
,C,A DESC,B DESC
,C,B DESC,A
,C,B DESC,A DESC
,A DESC,B,C
,A DESC,B,C DESC
,A DESC,C,B
,A DESC,C,B DESC
,A DESC,B DESC
,A DESC,B DESC,C
,A DESC,B DESC,C DESC
,A DESC,C DESC
,A DESC,C DESC,B
,A DESC,C DESC,B DESC
,B DESC,A,C
,B DESC,A,C DESC
,B DESC,C,A
,B DESC,C,A DESC
,B DESC,A DESC
,B DESC,A DESC,C
,B DESC,A DESC,C DESC
,B DESC,C DESC
,B DESC,C DESC,A
,B DESC,C DESC,A DESC
,C DESC,A,B
,C DESC,A,B DESC
,C DESC,B,A
,C DESC,B,A DESC
,C DESC,A DESC
,C DESC,A DESC,B
,C DESC,A DESC,B DESC
,C DESC,B DESC
,C DESC,B DESC,A
,C DESC,B DESC,A DESC
78 rows selected.
认证徽章论坛徽章:25
呵呵,太强了;
大家 都学习学习吧,本来我想可能用with嵌套来做的;
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号SQL SERVER 中把表名作为参数传递给存储过程后,怎么把表中的数据赋值给存储过程的变量?_百度知道
SQL SERVER 中把表名作为参数传递给存储过程后,怎么把表中的数据赋值给存储过程的变量?
CREATE PROC PRO@TABLENAME VARCHAR(20)ASDECLARE @T
INTEXEC ('SELECT'+@T+'=START FROM '+@TABLENAME+'WHERE....)怎么提示“=”附近有错误 高手帮忙啊
我有更好的答案
在各关键词之间没有加空格分隔开 SELECT,FROM, WHERE前后都需要有空格EXEC ('SELECT '+@T+'=START FROM '+@TABLENAME+' WHERE....)
为什么要加“‘’”,在数据库中‘’是字符型的,去掉‘’和+
@T 是一个变量,start是一个列。
其他1条回答
为您推荐:
其他类似问题
参数传递的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。sql存储过程 top 后面跟变量后 显示的结果就是语句_百度知道
sql存储过程 top 后面跟变量后 显示的结果就是语句
declare @sqlstr varchar(800)
declare @sqlstr2 varchar(800)
declare @a varchar(200)
declare @b varchar(20)
declare @i varchar(10)
declare @l int
set @i = 1
set @sqlstr = (select top 1 name
from sysobjects
where type = 'u'
我有更好的答案
改成使用top函数就可以使用变量了, 效果与top子句相同, 格式:select&top(@i)&...
你的数据库是SQL Server吧? 从2005开始支持top函数的, 如果低于2005则无此功能,你也无法实现,只能自己拼凑SQL语句来达成目的了。
谢谢了。。。 我的是2000
现在还用SQL Server 2000,确实版本比较低了。SQL Server有很多的新特性加入,在2000中都是没有的,比如top()函数,分析函数(有大约10个左右的分析函数, 基本格式function() over (partition by ... order by ...))等等。所以,如果有可能的话建议 升级SQL Server数据库。对应SQL Server 2000, 那么你只能拼凑SQL语句,然后用execute sp_executsql执行(这个好像SQL Server 2000有支持的,试试吧):declare&@sql&nvarchar(4000),&@i&intset&@i&=&10set&@sql&=&'select&top&'&+&cast(@i&as&nvarchar(10))&+&'&*&from&table_name'execute&sp_executesql&@sql
declare @b nvarchar(4000)set @b =
'select
xphone from ' + @sql +''execute sp_executesql @b我还得这样
这样后就报错了
我没有SQL Server 2000版本,你能把错误消息贴出来看看吗? 使用下面的SQL,拷贝过去执行:execute&sp_executesql&N'select&''Hello&World''&as&s'如果sp_executesql能正常使用的话,应该有如下图输出,
采纳率:89%
你的语法写错了,改成 select top 1
@i,id from sysobjects
where type = 'u'
and name like 'callhm%'
order by id asc)
。。。。。您么看懂
我要的是 top
@i后面要加,号,
我加您一下 你帮我看看
或者我的就是我的名字
我上班不能上QQ,你加个逗号试试呢
为您推荐:
其他类似问题
存储过程的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 order by 变量 的文章

 

随机推荐