SQL Server中传入select语句in范围参数的解决办法

作者 : Kevin

eg: table customer
columns :
 customerCode string
 customerName string
 customerGroup string
 customerRouteNum string
 ...........

现在为了查处选定的cusotmerCode的Customer的全部信息并显示在界面上(总共的customer数量为11029),每次读一个,显然很慢,因为可以多选,可能1个,可能是所有,所以读出所有然后剔出未选的,效率也不高。

因此开始采用存储过程:

CREATE PROCEDURE TS_GetCustomersByNames
( @custCodes nvarchar(3700)
) AS

select * from customer
where customerName in (@custNames)

一直得不到正确结果,发现不论传入参数 @custNames =  N'''Taste Of Punjab (Tsim Sha Tsui)'',''Lily Food Wholesales (Tuen Mun)'''
还是 @custNames =  N'Taste Of Punjab (Tsim Sha Tsui),Lily Food Wholesales (Tuen Mun)'(注:其实这种明显不对,试验一下而已)

但如果用select * from customer
where customerName in (''Taste Of Punjab (Tsim Sha Tsui)'',''Lily Food Wholesales (Tuen Mun)')----  (X)   
当然是有正确结果的。

那原因是什么呢?
原因是: @CustCodes作为参数传入时,编译处理导致实际执行的不同于语句(X)。

但我们就是要得到语句(X)的结果,怎么解决呢?办法是使用Exec执行,如下:
declare @sql nvarchar(3800)
set @sql = 'select * from customer where customerCode in ( '+ @custCodes + ')'
exec ( @sql )
GO


转载于:https://www.cnblogs.com/huangzhenwu/archive/2007/11/02/946957.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值