博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
很奇怪的一个问题,是关于sql参数化和传where in 参数的迷惑.请大伙给讲讲吧...小弟很迷糊现在.各位园友,拉兄弟一把!!...
阅读量:6680 次
发布时间:2019-06-25

本文共 1357 字,大约阅读时间需要 4 分钟。

报错的语句:     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 时失败。

转载地址:http://aqnao.baihongyu.com/

你可能感兴趣的文章
VMware-workstation安装
查看>>
vue 开发2017年变化回顾及2018年展望
查看>>
利用FluorineFX录制音频与视频
查看>>
web api 文档声明
查看>>
Ubuntu下配置 keepalived+nginx+tomcat 负载均衡
查看>>
ffmpeg对rtmp的基本操作[转]
查看>>
iframe嵌入页面不能全部展示
查看>>
PHP 流程
查看>>
angular 自定义指令详解
查看>>
自写 zTree搜索功能 -- 关键字查询 -- 递归无限层
查看>>
软件工程——四则运算3(C#)
查看>>
我的软考之路(八)——三大原则学会数据流图
查看>>
Grails开发环境的高速搭建
查看>>
jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组
查看>>
Redis为什么这么快
查看>>
js获取宽度设置thickbox百分比
查看>>
检测输入框字数的变化 注意onpropertychange oninput onchange onkeyup区别
查看>>
arm_GPIO_简单编程例题
查看>>
codves1282 约瑟夫问题 链表 会 T
查看>>
接口调用的跨域问题
查看>>