假设有存储过程:proc_test2 create proc proc_test2 @Id int begin as declare @sql varchar(max) @sql = 'select * from test2 where 1=1' if @Id <> 0 set @sql += ' and Id = ' +@Id exec (@sql) end 存储过程需要的参数是int类型,按道理直接传值(+@Id)是没有问题的,但是在执行存储过程的时候,却弹出 “sql 在将 nvarch…
消息 245,级别 16,状态 1,第 1 行在将 varchar 值 '2,7' 转换成数据类型 int 时失败. 原sql select UserName from s_User where Id in ( select UndertakerList from ZW_HandlerSend where HsID=7 ) 改成 select UserName from s_User where charindex(rtrim(Id), (select top 1 Undertaker…
alter PROCEDURE PrTradingDelete ) AS BEGIN WHERE id in(@id) END GO 执行上面这个存储过程会异常.提示 :在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败. 将存储过程更改为: alter PROCEDURE PrTradingDelete ) AS BEGIN ; END GO 可以正常执行了.…
错误问题: 消息 245,级别 16,状态 1,第 1 行在将 varchar 值 '2,8' 转换成数据类型 int 时失败. ps: 这是在后台分配菜单权限这个功能时出现的问题 一,解决方法: 将用户表和菜单表用CHARINDEX方法来选择存在的rows,返回集合, SELECT * FROM dbo.Meun m WHERE CHARINDEX(CONVERT(VARCHAR, m.Id), ( SELECT AuthorityId FROM dbo.UserInfo u WHERE u.…
有执行sql条件语句where id in(@参数)的时候,如果处理不当,就会出现问题:如下面这个存储过程: alter proc Web_gettwtwgoldgameserverGoldSell@ID int asdeclare @twgoldsellID nvarchar(1000)select @twgoldsellID=twgoldsellID from twgoldgameserver where ID=@IDset @twgoldsellID=replace(@twgoldsell…