当前位置: 代码迷 >> Sql Server >> MS SQL 存储过程数据转换有关问题
  详细解决方案

MS SQL 存储过程数据转换有关问题

热度:11   发布时间:2016-04-24 09:58:19.0
MS SQL 存储过程数据转换问题
ALTER PROCEDURE [dbo].[Protest]
@spc_id varchar(50)
AS
BEGIN
select * from ProductModelInfo where Spc_Id in (@spc_id)
END

这个存储过程,spc_id是int型,现在我要传的数据是(6,299,224)这样的一个数据,请问在存储过程中怎么声明啊?现在这么写会报数据转换错误。
------解决思路----------------------
ALTER PROCEDURE [dbo].[Protest]
 @spc_id varchar(50)
 AS
 BEGIN
 select * from ProductModelInfo where charindex(','+convert(varchar,Spc_Id)+',', ','+@spc_id+',')>0
 END
------解决思路----------------------
引用:
ALTER PROCEDURE [dbo].[Protest]
 @spc_id varchar(50)
 AS
 BEGIN
 select * from ProductModelInfo where charindex(','+convert(varchar,Spc_Id)+',', ','+@spc_id+',')>0
 END
按照您的思路,这样做可以吗
select * from ProductModelInfo where        CHARINDEX(CONVERT(VARCHAR(16),Spc_Id),@spc_id) > 0

------解决思路----------------------
spc_id 是int  @spc_id 输入参数为 int  就好了呀
------解决思路----------------------
哦,有逗号,把输入参数 的逗号去掉 转成int 
create procedure protest
@spc_id varchar (50)
as
begin
select * from ProductModelInfo
 where Spc_Id in( convert (int,replace(@spc_id,',','')))
end

------解决思路----------------------
我也推荐用CHARINDEX方法,为了保证完全匹配,假如@spc_id用的分隔符是逗号


 CHARINDEX(','+CONVERT(VARCHAR(100),Spc_Id)+',',','+@spc_id+',') > 0
  相关解决方案