Sql中IN的参数传递问题
方法一:
存储过程
CREATE function My_split(@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid] [int] IDENTITY (1, 1) NOT NULL ,Myvalues varchar(100))
--实现split功能的函数
--说明:@aString,字符串,如“27,28,29”;@pattern,分隔标志,如“ ,”
as
begin
declare @i int
set @aString=rtrim(ltrim(@aString))
set @i=charindex(@pattern,@aString)
while @i>=1
begin
insert @temp values(left(@aString,@i-1))
set @aString=substring(@aString,@i+1,len(@aString)-@i)
set @i=charindex(@pattern,@aString)
end
if @aString<>''
insert @temp values(@aString)
return
end
使用 select * from a where ID in (select Myvalues FROM my_split(@ID, ','))
方法二:
构成SQL。
string sSQL="select * from mytable where id in (" ;
for(int i=0;i<mylist.Count;i++)
{
sSQL+="@"+mylist[i].ToString()+",";
}
sSQL=sSQL.Remove(sSQL.Length-1,1);
sSQL+=")";
构成参数;
SqlParameter[] myParams = new SqlParameter[mylist.Count];
for(int i=0;i<mylist.Count;i++)
{
myParams[i] = (new SqlParameter("@"+mylist[i].ToString(), SqlDbType.Int));
myParams[i].Value=mylist[i].ToString();
}
存储过程
CREATE function My_split(@aString varchar(8000),@pattern varchar(10))
returns @temp table([Sid] [int] IDENTITY (1, 1) NOT NULL ,Myvalues varchar(100))
--实现split功能的函数
--说明:@aString,字符串,如“27,28,29”;@pattern,分隔标志,如“ ,”
as
begin
declare @i int
set @aString=rtrim(ltrim(@aString))
set @i=charindex(@pattern,@aString)
while @i>=1
begin
insert @temp values(left(@aString,@i-1))
set @aString=substring(@aString,@i+1,len(@aString)-@i)
set @i=charindex(@pattern,@aString)
end
if @aString<>''
insert @temp values(@aString)
return
end
使用 select * from a where ID in (select Myvalues FROM my_split(@ID, ','))
方法二:
构成SQL。
string sSQL="select * from mytable where id in (" ;
for(int i=0;i<mylist.Count;i++)
{
sSQL+="@"+mylist[i].ToString()+",";
}
sSQL=sSQL.Remove(sSQL.Length-1,1);
sSQL+=")";
构成参数;
SqlParameter[] myParams = new SqlParameter[mylist.Count];
for(int i=0;i<mylist.Count;i++)
{
myParams[i] = (new SqlParameter("@"+mylist[i].ToString(), SqlDbType.Int));
myParams[i].Value=mylist[i].ToString();
}
浙公网安备 33010602011771号