SQLServer中传⼊select语句in范围参数的解决办法
作者 :
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)'(注:其实这种明显不对,试验⼀下⽽已)sql中select是什么意思
但如果⽤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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。