文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» 微软SQL Server专区 » SQL Server数据库管理 » 救助!!!!一个关于 存储过程 的case 嵌套问题!!!       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 救助!!!!一个关于 存储过程 的case 嵌套问题!!!  ( 查看:462  回复:6 )   
 该主题悬赏的20无忧币已被全部领完 
 
IdiotBenBen
新新人类  点击可查看详细


帖子 75
精华 0
无忧币 137
积分 147
阅读权限 20
注册日期 2007-4-30
最后登录 2008-7-1 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-13 21:11   标题:救助!!!!一个关于 存储过程 的case 嵌套问题!!!
上一帖 |
--本存储过程的目的是用来调用参数个数不同的存储过程,其中被调用的存储过程都是一些简单的查询,只是查询的方式不同而已。
--但是在检验的时候会报exec 附近有错,和when 附近有错,如果删除所有的 exec 则报告 @a_parameter参数附近有错。如果删除所有的@a_parameter 参数 ,检验时不会出错,--但在运行的时候,它就报 “select_f_c_电话 ”之类的不是有效的列名。
--所以小弟在这跪求各位好心的大哥大姐们给我解决一下,万分感激!!!!
use Depot_info
go
CREATE PROCEDURE all_p (@type nchar(20),@a_parameter nchar(20),@b_parameter nchar(20))
AS
select
case @type
       when '求购商电话'          then exec select_f_c_电话  @a_parameter
-- select_f_c_电话 是一个存储过程,下同。
       when '求购商商品名称'      then exec select_f_c_订货名称 @a_parameter
       when '定单编号'            then exec select_f_c_定单编号 @a_parameter
       when '求购商法人代表'      then exec select_f_c_法人代表 @a_parameter
       when '求购商'              then exec select_f_c_求购商 @a_parameter
       when '仓库编号'            then exec select_f_d_仓库编码 @a_parameter
       when '仓库名称'            then exec select_f_d_仓库名称 @a_parameter
       when '仓库负责人'          then exec select_f_d_负责人 @a_parameter
       when '商品编码'            then exec select_f_m_编码 @a_parameter
       when '商品名称'            then exec select_f_m_商品 @a_parameter
       when '商品主要负责人'      then exec elect_f_m_主要负责人 @a_parameter
       when '商品_主要负责人'     then exec select_f_m_商品_主要负责人 @a_parameter,@b_parameter
       when '商品编码_主要负责人' then select_f_m_编码_主要负责人 @a_parameter,@b_parameter
end


/* 存储过程:select_f_c_电话 的内容:
CREATE PROCEDURE select_f_c_电话 (@a_parameter nchar(20))
as
select *from copartner_info
where 电话=@a_parameter
GO

下面那些存储过程和这个也差不多。
*/



让一个网站为朋友送祝福
2007-12-13 21:111楼
[ 顶部 ]
 
fengyp
副版主  点击可查看详细



十二生肖之羊   白羊座   行业勋章   技术勋章   诚信兄弟  
帖子 86
精华 0
无忧币 2136
积分 109
阅读权限 140
注册日期 2007-11-22
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2007-12-13 23:49   标题:回复"存储过程 的case 嵌套问题"
该回复被 IdiotBenBen 奖励 20 点无忧币
此回复于2007-12-26 08:26被 阿楚 评为最佳答案

楼主的SQL语句并没有错误,单纯从可读性上讲,我认为楼主的case when 的写法可读性要强一些,楼主可以考虑试一下将then后面的语句用begin……end包起来试试。
由于SQL的if else不像VB那样用end结束,也不像c#那样用{},所以读起来比较难。"
楼主的语句我一般写成
select
case when @type='求购商电话'          then begin exec select_f_c_电话  @a_parameter end
-- select_f_c_电话 是一个存储过程,下同。
       when @type= '求购商商品名称'      then begin exec select_f_c_订货名称 @a_parameter end
       when @type='定单编号'            then begin exec select_f_c_定单编号 @a_parameter end
       when @type='求购商法人代表'      then begin exec select_f_c_法人代表 @a_parameter end
       when @type='求购商'              then begin exec select_f_c_求购商 @a_parameter end
       when @type='仓库编号'            then begin exec select_f_d_仓库编码 @a_parameter end
       when @type='仓库名称'            then begin exec select_f_d_仓库名称 @a_parameter end
       when @type= '仓库负责人'          then begin exec select_f_d_负责人 @a_parameter end
       when @type='商品编码'            then begin exec select_f_m_编码 @a_parameter end
       when @type='商品名称'            then begin exec select_f_m_商品 @a_parameter end
       when @type= '商品主要负责人'      then begin exec elect_f_m_主要负责人 @a_parameter end
       when @type='商品_主要负责人'     then begin exec select_f_m_商品_主要负责人 @a_parameter,@b_parameter end
       else @type='商品编码_主要负责人' then begin select_f_m_编码_主要负责人 @a_parameter,@b_parameter end
end

[ 本帖最后由 fengyp 于 2007-12-15 09:05 编辑 ]



见识一下2006年必看的技术专题
2007-12-13 23:492楼
[ 顶部 ]
 
boyi55
副版主  点击可查看详细


诚信兄弟   天秤座  
帖子 849
精华 1
无忧币 3638
积分 936
阅读权限 140
来自 (保密)
注册日期 2006-1-12
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2007-12-13 23:50 
declare @a varchar(20),@b varchar(20),@c varchar(20)
set @a='c'
set @c='abcd'
select @b=case @a
when 'a' then 'a'
when 'b' then  'b'
when 'c' then 'c '
end
exec @b @c
可以试下这样做。



春江潮水连海平/海上明月共潮生/滟滟随波千万里/何处春江无月明!
2007-12-13 23:503楼
[ 顶部 ]
 
罗文豪
新新人类  点击可查看详细



十二生肖之羊   天秤座   行业勋章   技术勋章   诚信兄弟  
帖子 83
精华 0
无忧币 307
积分 101
阅读权限 20
来自 (保密)
注册日期 2006-12-22
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-14 09:17 
不懂~~学习一下!!!!



网络工程师到底该不该去考CCIE认证?
2007-12-14 09:174楼
[ 顶部 ]
 
怡红公子
副版主  点击可查看详细



十二生肖之马   双鱼座   行业勋章   技术勋章   诚信兄弟  
帖子 65
精华 0
无忧币 166
积分 69
阅读权限 140
注册日期 2007-9-12
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-12-14 16:00 
用if then else if其实就可以了
我个人认为比拼SQL字符串的好。



【MVP】马上申请成为“微软最有价值专家”
2007-12-14 16:005楼
[ 顶部 ]
 
梦月→Ann
新新人类  点击可查看详细



帖子 2
精华 0
无忧币 8
积分 2
阅读权限 20
注册日期 2007-12-14
最后登录 2007-12-14 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2007-12-14 20:09   标题:回复 #1 IdiotBenBen 的帖子

小弟不才!勿能理会,
请详解!谢谢!非常感谢!
(我是楼主)



网络工程师到底该不该去考CCIE认证?
2007-12-14 20:096楼
[ 顶部 ]
 
boyi55
副版主  点击可查看详细


诚信兄弟   天秤座  
帖子 849
精华 1
无忧币 3638
积分 936
阅读权限 140
来自 (保密)
注册日期 2006-1-12
最后登录 2008-7-24 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2007-12-14 20:44 


QUOTE:
原帖由 怡红公子 于 2007-12-14 16:00 发表
用if then else if其实就可以了
我个人认为比拼SQL字符串的好。
的确用if else更优一点.并且条理清晰,便于阅读.



春江潮水连海平/海上明月共潮生/滟滟随波千万里/何处春江无月明!
2007-12-14 20:447楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号