比喻下面请看:
select * from table where id in (@id)其中@id的值有几个,比喻1,2,3id 是 int 类型怎么处理?

解决方案 »

  1.   

    定义一个字符串declare @sql varchar(100)set @sql = 'select * from table where id in ('+cast(@id)+')' 然后@id 这个字符串里面赋值 1,2,3...就可以最后执行这个@sql exec (@sql) 
      

  2.   

    string @id = "," + @id;
    @id= @id.trim(',');
      

  3.   

    似乎没什么好办法,只能拆开写了WHERE id in (@id1,@id2)
      

  4.   

    用多个int的id拼
    或是将参数改成string型的
      

  5.   


    select * from [table] where charindex(','+ltrim(id)+',',','+@id+',')>0
      

  6.   


                int[] parameters = new int[] { 1, 2, 3 };
                string sql = "select * from table";
                if (parameters.Count() > 0)
                {
                    sql += " where  where id=";
                    for (int index = 0; index < parameters.Count(); index++)
                    {
                        if (index == parameters.Length - 1)
                        {
                            sql += parameters[index].ToString();
                            break;
                        }
                        sql += parameters[index].ToString() + " or id=";
                    }
                }
      

  7.   


    赞成并推荐7楼的方法:
    int[] datas = new int[] { 1, 2, 3 };
    StringBuilder builder = new StringBuilder();
    SqlParameter[] parms = new SqlParameter[datas.Length];
    string parmName;for(int i=0; i<datas.Length; i++)
    {
        parmName = string.Format("@id{0},", i);
        builder.Append(parmName);
        parms[i] = new SqlParameter(parmName, datas[i]);
    }
    string idParms = builder.ToString().TrimEnd(',');string sql = string.Format("select * from table where id in ({0})", idParms);using(SqlConnection conn = new SqlConnection(connectionString))
    {
        SqlCommand comm = new SqlCommand(sql, conn);
        comm.Parameters.AddRange(parms);
        conn.Open();
        SqlDataReader reader = comm.ExecuteReader();
        // ...... 从 SqlDataReader 读数据
        conn.Close();
    }
      

  8.   


    这个方法没有错,楼主说不能用是不是因为cast(@id)这里报错呀?如果@id为varchar类型的话,把cast去掉
    set @sql = 'select * from table where id in (' + @id + ')'不要去一个个提,球麻烦死了
      

  9.   

    还有一个办法就是用 union 这个,如果有多个循环加 union 就行了呀。
      

  10.   

    当然报错,id为int型怎么可以从varchar集里匹配呢
      

  11.   

    如果说:
    declare @id varchar
    set @id='1,2,3,4'
    你这么用select * from table where id in (@id)  就没有问题
      

  12.   

    定义一个字符串declare @sql varchar(100)set @sql = 'select * from table where id in ('+cast(@id)+')'然后@id 这个字符串里面赋值 1,2,3...就可以最后执行这个@sqlexec (@sql)正解啊
      

  13.   

    declare @bh varchar(1000)
    set @bh='S510681001G,P440305001G'select * from table where  厂家编号  in (@bh)结果没有数据
    其中S510681001G和P440305001G是两个厂家的编号(有这两个编号)且编号是varchar类型
      

  14.   

    给你一个函数:运行
    create   function   f_split(@c   varchar(2000),@split   varchar(2))   
    returns   @t   table(col   varchar(20))   
    as   
        begin   
        
          while(charindex(@split,@c)<>0)   
            begin   
              insert   @t(col)   values   (substring(@c,1,charindex(@split,@c)-1))   
              set   @c   =   stuff(@c,1,charindex(@split,@c),'')   
            end   
          insert   @t(col)   values   (@c)   
          return   
        end   
    go 
    再运行代码:
    declare @bh varchar(1000)
    set @bh='S510681001G,P440305001G'select @bh
    select * from table where 厂家编号 in (select *from f_split(@bh,','))100%没问题
      

  15.   

    如果按你最先问的,按7楼的方法肯定行但这里你说的厂家编号根本不是int型的嘛,按理说直接in就可以了。取不到数据可能是别的地方有问题
      

  16.   


    create table mytable(ColA int,ColB varchar(50))
    insert mytable values(1,'A')
    insert mytable values(2,'B')
    insert mytable values(3,'C')
    insert mytable values(4,'D')
    insert mytable values(5,'E')
    --select * from mytable
    declare @id varchar(50)
    set @id='1,3,5'
    declare @sql varchar(8000)
    set @sql='select * from mytable where ColA in('+@id+')'
    execute(@sql)
    drop table mytable
    我不想骂人,自己回去试一下能不能