zoukankan      html  css  js  c++  java
  • 关于sql where id in 转换成数据类型 int 时失败(转)

    有执行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 时失败。

  • 相关阅读:
    Python多线程join的用法
    Python多线程互斥锁
    python Queue模块
    精度计算————乘法(大数乘小数)
    精度计算——大数阶乘
    python埃式筛法求素数
    Scala io操作
    scala io,ubuntu常见配置
    大数据之scala高级语法学习
    大数据之scala基本语法学习
  • 原文地址:https://www.cnblogs.com/mr-jia/p/3581744.html
Copyright © 2011-2022 走看看