SQL Server中传入select语句in范围参数的解决办法
2007-11-02 14:41
555 查看
作者 : 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
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
相关文章推荐
- Mybatis 对单独传入参数string进行判断时报There is no getter for property named '**' in 'class java.lang.String解决办法
- MyBatis动态传入表名,字段名参数的解决办法
- MyBatis动态传入表名,字段名参数的解决办法
- MyBatis动态传入表名,字段名参数的解决办法
- iBatis in 语句参数传入方法
- c# in deep 之对Linq表达式范围变量限制问题的一些解决办法
- MyBatis动态传入表名,字段名参数的解决办法--用于分表--表名是动态的
- 关于用sql语句select多个字段,该使用什么接收的解决办法
- MyBatis动态传入表名,字段名参数的解决办法
- MyBatis动态传入表名,字段名参数的解决办法
- Oracle通过struct传入varchar2参数为null的解决办法
- MyBatis动态传入表名,字段名参数的解决办法
- java.sql.SQLException: 索引中丢失 IN 或 OUT 参数:: 1解决办法
- “索引中丢失 IN 或 OUT 参数”问题解决办法
- SQL中in参数超过1000的解决办法
- 关于JAVA调用ORACLE存储过程时,传入动态参数作为in语句条件的问题
- JdbcTemplate底层操作在IN语句中传入一组参数值实例
- 一行代码解决 sql语句 in传入数组变字符串
- Java调用Oracle存储过程时,给in语句传入参数的方式
- MyBatis动态传入表名,字段名参数的解决办法