很奇怪的一个问题,是关于sql参数化和传where in 参数的迷惑.请大伙给讲讲吧...小弟很迷糊现在.各位园友,拉兄弟一把!!...

报错的语句:     strSql.Append(" AND cu.CurrentSalesMan in (@CurrentSalesMans)");                                

                     db.AddParameter("@CurrentSalesMans", GetCommaPartionUserIDs(CurrentSalesMan));                     

错误提示:Conversion failed when converting the nvarchar value '1,2,3,4,5,6,9,12,13,15,26,27,28,29' to data type int.

 

 

可以运行的语句: strSql.Append(" AND cu.CurrentSalesMan in (" + GetCommaPartionUserIDs(CurrentSalesMan) + ")");                    

 

 

 

cu.CurrentSalesMan  是 Int 类型.   

 GetCommaPartionUserIDs(CurrentSalesMan)的结果是:"1,2,3,4,5,6,9,12,13,15,26,27,28,29"

 

我的问题是为什么参数化的那条语句不能运行.而拼接的语句能运行呢?

 

 

我测试的结果是.:"1,2,3,4,5,6,9,12,13,15,26,27,28,29"是不是被参数化成了数据库中的  ('1,2,3,4,5,6,9,12,13,15,26,27,28,29') 而不是我们想要的: (1,2,3,4,5,6,9,12,13,15,26,27,28,29)

 

数据库中当CurrentSalesMan 是nvarchar时候.

use GoldHawk;

select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in (1); select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in ('1');结果相同

 

数据库中当CurrentSalesMan 是int时候.

use GoldHawk;

select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in (1); select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in ('1');结果相同

结果也相同

 

但是

use GoldHawk;

select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in (1,2); select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in ('1,2');

下边的语句会报错..

说明数据库在用 where In 的时候,会试图把in后边被逗号分割的每个元素转换成in前面字段的类型.如果转换成功.则正常运行.

转换失败则会报转换失败的错误.如 :消息 245,级别 16,状态 1,第 1 行 在将 varchar 值 '1,2' 转换成数据类型 int 时失败。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值