首页 > 数据库 >关于sql where id in 转换成数据类型 int 时失败

关于sql where id in 转换成数据类型 int 时失败

时间:2022-12-05 11:01:34浏览次数:37  
标签:int twgoldsell 数据类型 twgoldsellID sql where ID select


有执行sql条件语句where id in(@参数)的时候,如果处理不当,就会出现问题:
如下面这个存储过程:

alter proc Web_gettwtwgoldgameserverGoldSell
@ID int 
as
declare @twgoldsellID nvarchar(1000)
select @twgoldsellID=twgoldsellID from twgoldgameserver where ID=@ID
set @twgoldsellID=replace(@twgoldsellID,'|',',')
set @twgoldsellID=left(@twgoldsellID,len(@twgoldsellID)-1) 
select * from twgoldsell where ID in (@twgoldsellID)

我们看上去好像没有什么问题,却在执行的时候报错:

消息 245,级别 16,状态 1,第 1 行
在将 varchar 值 '813,1160,1219,1227,1232' 转换成数据类型 int 时失败。

其实此条语句在执行时,
select * from twgoldsell where ID in (@twgoldsellID)
执行的语句是:select * from twgoldsell where ID in ('813,1160,1219,1227,1232')
这样执行当然出错,因为@twgoldsellID是一个字符串,现在是以参数的形式传递。

解决办法:
select * from twgoldsell where ID in (@twgoldsellID)
改为:
exec('select * from twgoldsell where ID in ('+@twgoldsellID+')')

记住:一定要加exec执行函数 ,不然会报如下错误:
消息 245,级别 16,状态 1,过程 Web_gettwtwgoldgameserverGoldSell,第 8 行
在将 varchar 值 '+@twgoldsellID+' 转换成数据类型 int 时失败。

标签:int,twgoldsell,数据类型,twgoldsellID,sql,where,ID,select
From: https://blog.51cto.com/u_11295556/5911590

相关文章

  • SqlServer表分区
    你是否在千方百计优化SQLServer数据库的性能?如果你的数据库中含有大量的表格,把这些表格分区放入独立的文件组可能会让你受益匪浅。SQLServer2005引入的表分区技术,让用......
  • SQLSERVER 2005 表分区说明
    2005 分区表实际应用例子  定义,原理网上讲得多了.在这就不费口舌,记录下创建过程.  一. 最基本,最重要的一步就是创建分区函数.创建分区函数首先要确定分区键--既......
  • SQLServer 2005 海量数据解决方案(分区表)与对已存在的表进行分区
    这两天一直在研究2005中如何对表进行分区,但是参考了多数资料都是说新建表后再将原表中数据插入到新表中,这样有些不方便.  最后找到了在已有表上做分区表的方法.见......
  • 数据库缓存服务——NoSQL之Redis配置与优化
    缓存概念缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存C......
  • Navicat中MySQL命令列界面操作及基础常用命令
    https://blog.csdn.net/weixin_71712767/article/details/126863842如何使用navicat进入MySQL命令行界面?如何通过命令对数据库/表进行操作? 如何在Navicat中MySQL链接打......
  • 连接mysql报错 errorCode 1129, state HY000, Host ‘xxx‘ is blocked because of ma
    https://copyfuture.com/blogs-details/202206101947537199错误原因:mysql设定了单个客户端最大连接失败次数,超过后便无法再连接成功.可命令行查看:最大失败数为100.......
  • SQL高级教程
    1、selectTOPselecttop子句用于规定要返回的记录的数目。对拥有数千条记录的大型表来说,是非常有用的。注意:并非所有的数据库系统都支持selecttop语句。MySQL支持limi......
  • EF使用LINQ和Lamda实现SQL查询的内连接(INNER JOIN)和左连接(LEFT JOIN)
    摘自:https://www.freesion.com/article/7263358177/ 背景介绍:1.OperateLogInfo:日志表2.SystemUserInfo:用户表需求:查询日志表,要根据日志表的创建人id查询出创建人姓名(日志......
  • SAP HANA SQL系列五:字符串函数
    ASCIIASCII©返回字符串c中第一个字节的ASCII值。SELECTASCII('Ant')"ascii"FROMDUMMY;ascii65 CHARCHAR(n)返回ASCII值为数字n的字符。......
  • 怎么查看和获取SQL Server实例名
    查看實例名時可用1、服务—SQLServer(实例名),默认实例为(MSSQLSERVER)或在连接企业管理时-查看本地实例2、通過注冊表HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft......