SQL存储过程中传入参数实现任意字段排序

小玄画画

小玄画画

2016-02-19 13:49

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的SQL存储过程中传入参数实现任意字段排序,希望大家看完后能赶快学习起来。

  在做一个project的时候,要对表实现任意的排序,说得明白点就是这样:

  在存储过程中声明一个@parameter,然后在使用查询条件后的排序,要根据我的@parameter来实现,而我这个@parameter实际传进去的就是一个字段值。

  网上Google了一下,发现有这样的例子,大多数都是以普提树的多字段任意分页的存储过程结合在一起,看起来好不复杂,而我现在没必要搞分页,没有办法实现吗???

  我先按常理搞了一个这样的:

select * from SiteDetailInfo where SiteBasicId = SiteId And SiteIsCheck = 1 order by  @Parameter desc

  在查询分析器中运行报错:

  ORDER BY 子句所标识的第 %1! 个 SELECT 项包含了一个变量,该变量位于标识列位置的表达式中。只有排序依据表达式引用的是列名时,才允许在该表达式中使用变量。

  好像语法上有问题,这是意料之中的,隐约记得应该加上单引号之类的,问了一下网友史帝尔,很快就丢过答案过来了,果然是有点语法上的问题.

  修正如下:

create   procedure   proc_test
@fieldname   varchar(50)
as

declare   @sql   varchar(1000)
set   @sql= "update   [table]   set   "   +   @fieldname   +   "= "   +   @fieldname   +   "+1 "
exec(@sql)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

go

  或者:

declare   @field   varcahr(10)
update   table   (case   @field   when   "字段1名 "   then   set   字段1   =   字段1   +   1  
                                                    when   "字段2名 "   then   set   字段2   =   字段2   +   1
                                                    ....   end)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  再在查询分析器中F5一下,OK,没报错了。happy

  不料,让老朋友分析了一下,提醒这样风险比较大,容易出错,应该有更周全的写法,当然不能错过,不多长时间得到下面的语句:

SELECT *

FROM Shippers

ORDER BY

CASE @ColName WHEN 'ShipperID'

THEN ShipperID ELSE NULL END,

CASE @ColName WHEN 'CompanyName'

THEN CompanyName ELSE NULL END,

CASE @ColName WHEN 'Phone'

THEN Phone ELSE NULL END

  哇噻,不错不错,这样考虑得很周全喔,不过我这表中有20来个字段,难道要一个一个去Case吗?哈哈,哈哈,自己权衡两种方法的利弊吧。

  第一种方法:比较简单,但是如果字段值出错的话,那就容易出错的了,这个问题应该可以在你程序中写死你在表中的字段的吧。

  第二种方法:比较周全,当然,如果你一个表有10个以上的字段,要你一个一个去Case的话,那就不知你能不能顶得住了,假如有50个字段的话(像企业信息表之类的)

展开更多 50%)
分享

猜你喜欢

SQL存储过程中传入参数实现任意字段排序

编程语言 网络编程
SQL存储过程中传入参数实现任意字段排序

用排序串字段实现树状结构(存储过程)

ASP
用排序串字段实现树状结构(存储过程)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在存储过程中实现分页

Web开发
在存储过程中实现分页

在SQL Server存储过程中执行DTS包

SQLServer
在SQL Server存储过程中执行DTS包

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何在SQL Server中实现扩展存储过程

编程语言 网络编程
如何在SQL Server中实现扩展存储过程

在SQL Server的存储过程中调用Com组件

SQLServer
在SQL Server的存储过程中调用Com组件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Word 2007基础:认识图形图片样式

Word 2007基础:认识图形图片样式

SQLCLR(三)触发器

SQLCLR(三)触发器
下拉加载更多内容 ↓