一个表
T_FLOOR
floor_id int  //楼层编号
area_id  int  //楼层所属区域
floor_desc varchar(20)内容为
floor_id area_id  floor_desc 
1 21 五楼
2 22 四楼
3 21 四楼
4        22        一楼
5        23        二楼我想在存储过程中根据area_id 查询楼层信息
如 我输入参数是 21,23
得到
1 21 五楼
3 21 四楼
5        23        二楼我使用
declare @sArea varchar(20)
set @sArea='21,23'
SELECT floor_id FROM T_FLOOR WHERE area_id in (@sArea)
报错 将 varchar 值 '21,23' 转换为数据类型为 int 的列时发生语法错误。如果使用
declare @sArea varchar(20)
set @sArea='21,23'
select * from t_floor where convert(varchar(5),AREA_ID) in(@sArea)
则没有记录返回请问应该怎么做?

解决方案 »

  1.   

    declare @sArea varchar(20)
    set @sArea='21,23'
    declare @sql varchar(200)
    set @sql = 'SELECT floor_id FROM T_FLOOR WHERE area_id in (' + @sArea + ')'
    exec(@sql)
      

  2.   

    declare @sArea varchar(20)
    set @sArea='21,23'
    exec('select * from t_floor where AREA_ID in('+@sArea+')')
      

  3.   

    declare @t table(floor_id int,area_id  int,floor_desc varchar(20))
    insert into @t select
    1, 21, '五楼'
    union all select 
    2, 22, '四楼'
    union all select 
    3, 21, '四楼'
    union all select 
    4,        22,        '一楼'
    union all select 
    5,        23,        '二楼'declare @id table(p int)
    insert @id values(21)
    insert @id values(22)
    SELECT * FROM @t WHERE area_id in (select * from @id)
      

  4.   

    declare @sArea varchar(20)
    set @sArea='21,23'
    select * from t_floor where charindex(convert(varchar,AREA_ID), @sArea) > 0
      

  5.   

    SELECT floor_id FROM T_FLOOR WHERE area_id in (@sArea)
    用动态语句
    exec ('SELECT floor_id FROM T_FLOOR WHERE area_id in ('+@sArea+')')