比喻下面请看:
select * from table where id in (@id)其中@id的值有几个,比喻1,2,3id 是 int 类型怎么处理?
select * from table where id in (@id)其中@id的值有几个,比喻1,2,3id 是 int 类型怎么处理?
解决方案 »
- 无法引用的dll
- winform 工具栏按钮Enabled属性的动态改变问题
- 两个程序共享数据 都是自己写的程序
- Winform中关于DataGridView有三个简单的问题请教大家。
- ADO.NET 2.0技术内幕 和 ADO.NET2.0高级程序设计那本好
- 关于跨网段通信
- vml中v:group如何删除一类对象?remove......?
- 水晶报表:无法找到清单资源中的报告.请创建项目并再次尝试 !
- ********** 怎么在顶上面那个“签回”旁边弄个全选框框?
- MSDN帮助文件的白色背景太晃眼,看一会眼睛酸疼,能不能修改?
- 动画的问题,实现多个物体一起动画
- C#VSTO如何修改Word文档里指定的字符信息内容,而不改变其它内容。
@id= @id.trim(',');
或是将参数改成string型的
select * from [table] where charindex(','+ltrim(id)+',',','+@id+',')>0
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楼的方法:
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();
}
这个方法没有错,楼主说不能用是不是因为cast(@id)这里报错呀?如果@id为varchar类型的话,把cast去掉
set @sql = 'select * from table where id in (' + @id + ')'不要去一个个提,球麻烦死了
declare @id varchar
set @id='1,2,3,4'
你这么用select * from table where id in (@id) 就没有问题
set @bh='S510681001G,P440305001G'select * from table where 厂家编号 in (@bh)结果没有数据
其中S510681001G和P440305001G是两个厂家的编号(有这两个编号)且编号是varchar类型
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%没问题
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
我不想骂人,自己回去试一下能不能