SQL Server 2000 的查询,我写的只能根据一个输入ID来查询。用户每次会输入一个或者多个 ID, 怎么批量查询

用户每次输入的ID不确定,可能一个,可能一百多个

1. 写一个存储过程,输入参数为用户填写的id串;存储过程负责此id串拆分插入一张临时表,比如t_ta(临时表有2个字段,比如:serid(序号,表示一次处理,每调用一次此存储过程,新生成一个序号),inputid(拆分后的id),2者联合主键

2. 在查询时,使用临时表就可以了

select * from table where id in (select inputid from t_ta where serid = xxx)
xxx为本次的序号追问

你这个好像比较可行,我先试试。。。我的ID是固定长度12位。。。SP怎么写呢。。

追答

就是写一个循环,将传入的id串分解(比如用逗号分隔的串),插入临时表

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-31
先创建一个方法

create FUNCTION dbo.FunSplitStringToAraay(@vchString varchar(1000))
RETURNS @tabArray table
(
string varchar(100)
)
AS
BEGIN
DECLARE @intStart int
DECLARE @intLocation int
DECLARE @vchSubstring varchar(100)
SELECT @intStart =1
SELECT @intLocation = CHARINDEX(',',@vchString,@intStart)
WHILE (@intLocation <> 0 )
BEGIN
SELECT @vchSubstring=SUBSTRING(@vchString,@intStart,@intLocation-@intStart)
INSERT INTO @tabArray(string) SELECT @vchSubstring
SELECT @intStart = @intLocation +1
SELECT @intLocation = CHARINDEX(',',@vchString,@intStart)
END
RETURN
END

insert into #a
select dbo.FunSplitStringToAraay (传入 的id) id

select * from table where id in (select id from #a)追问

你回答得太简洁了。。

追答

你在看看

追问

我对SQL懂得不深,,,方法这些还不太懂。。还是谢谢了

第2个回答  2012-05-31
建一个数组,把所有id放入数组中,然后在
string s="";
foreach(int i in shuzu)
{
s+=i+",";
}
s=s.subString(s.Length-1);
string sql="select * from 表名 where id in ("+s+")";追问

数组不太行。。还是谢谢了。

第3个回答  2012-05-31
用查询语句拼接
select * from 表名 where id="+id1+" or id="+id2+"........追问

每次输入的参数个数不确定。。这样拼接不行的。。
我现在的做法是写一个SP,设定一个参数,用户就输入一个参数来查询。。。现在就是想改成根据多个参数来查询,,而且每次输入的参数个数不确定。。

追答

select * from 表名 where id in (id1,id2,id3.....)
这样写 你是在数据直接查询 还是通过页面上查询

追问

页面上,,,用户输入一个ID,,得出查询结果。。

追答

例如页面上一个textbox里输入多个id 每个id用英文逗号隔开
查询语句写法
select * from 表名 where id in ("+textbox.text+") 这样写
如果是一个id 不需要英文逗号

追问

and left(rtrim(a.refe),12)= @print_id 这是用户输入的ID。。。上面这种写法不太行。。

第4个回答  2012-05-31
Private Sub InitMcode()
If v_resondept <> "" Then
Dim resondeptlist() As String = v_resondept.Split(",")
For Each str As String In resondeptlist
…………
Next
End If
End Sub
vb 的 参考下追问

非常感谢。

相似回答