SET @nvrSql ='SELECT UserID,ReceiveTime,Destination from vwInfo 
where Lat>=@top AND Lat<=@bottom AND Long>=@left AND  Long<=@right and (DATEDIFF(s, ReceiveTime, GETDATE()) <= 21600)'  
    if @filterShip<>''
      SET @nvrSql=@nvrSql+ ' AND Type in (@filterShip)'if @filterShip=''
 EXEC Sp_executesql @nvrSql,N'@top varchar(100),@bottom varchar(100),@left varchar(100),@right varchar(100)',@top,@bottom,@left,@right
else
   EXEC Sp_executesql @nvrSql,N'@top varchar(100),@bottom varchar(100),@left varchar(100),@right varchar(100),@filterShip varchar(50)',@top,@bottom,@left,@right,@filterShip这样在执行存储过程时, @filterShip 传入值:  '1,2,3,16,7,19,0'  时 总提示
消息 245,级别 16,状态 1,第 1 行
在将 varchar 值 '1,2,3,16,7,19,0'  转换成数据类型 int 时失败。type这个值 不确定,必须得传入参数. 

解决方案 »

  1.   

    “type这个值 不确定,必须得传入参数. ”type 是什么类型的!如果是 int 型的话!就把 Type in (@filterShip) 改为 rtrim(Type) in (@filterShip) 试试..
      

  2.   

    type这个值 不确定,必须得传入参数.-->很明显啊
    没有传入type这个参数啊
      

  3.   

    AND Type in ('+@filterShip+')'
      

  4.   

    SET @nvrSql=@nvrSql+ ' AND Type in (@filterShip)'
    -->
    SET @nvrSql=@nvrSql+ ' AND charindex(Type , ''' + @filterShip + ''' ) > 0 '