如何解决SQL Server中传入select语句in范围参数

数据库 SQL Server
如何解决SQL Server中传入select语句in范围参数呢?下面将为您解析产生该问题的原因,以及相应的解决办法,供您参考,希望对您有所启迪。

如何解决SQL Server中传入select语句in范围参数呢?下面将为您解析产生该问题的原因,以及相应的解决办法,供您参考,希望对您有所启迪。

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

 

【编辑推荐】
对SQL Server中任意select语句分页的存储过程

使用SQL中SELECT语句的使用条件逻辑

SQL语句中SELECT语句的执行顺序

为您讲解SQL的SELECT语句

教您如何简单删除SQLServer数据库的所有数据

 

责任编辑:段燃 来源: 博客园
相关推荐

2010-09-03 15:27:02

SQLSELECT语句

2010-09-03 15:08:03

SQLselect语句

2010-07-26 10:30:13

SQL Server

2010-11-11 10:18:59

select into

2010-07-02 13:18:01

SQL Server

2017-08-18 14:47:31

SQL ServerCPU过高SQLProfiler

2011-04-06 13:38:11

SQL ServerSQL语句

2010-09-07 15:54:47

SQL语句LIKE

2010-11-12 10:46:16

SQL Server变

2023-03-30 09:10:06

SQLSELECTFROM

2010-11-11 11:37:22

SQL SELECT语

2010-09-03 14:39:15

SQLSELECT语句

2010-11-12 13:08:36

动态sql语句

2010-09-06 13:41:42

sql server语句

2010-06-28 14:36:38

SQL Server数

2017-04-07 14:00:02

程序猿SQL ServerCPU

2010-09-03 14:47:50

SQLSELECT语句

2010-09-03 15:39:24

SQLSelect语句

2010-11-11 11:49:02

SQL嵌套SELECT

2010-09-07 16:38:36

SQL语句SELECT DIST
点赞
收藏

51CTO技术栈公众号