准备做一个存储过程,能够通过表中的字段,随意组合(比如可以通过STUID和STUNAME来查询,也可以通过STUNAME和PHONE来查询,这些都是用户随机的),查询表中的信息,不知道自己说的是不是够明白

解决方案 »

  1.   

    CREATE TABLE StuInfo
    (
    StuId int,
    StuName  Nvarchar(8),
    Phone Nvarchar(10),
             Address  Nvarchar(30)
    )
    go
    create proc pro_query 
    @stuid int = '%',
    @stuname nvarchar(8)='%'
    as
    select * from StuInfo where ((stuid=@stuid) or (@stuid='%')) and ((stuname=@stuname) or (@stuname='%'))
    go
      

  2.   

    (
    StuId nvarchar(10),
    StuName  nvarchar(8),
    Phone nvarchar(10),
            Address  nvarchar(30)
    )
    create proc pr_Info @StuId nvarchar(10),
                        @StuName nvarchar(8),
                        @Phone nvarchar(10),
                        @Address nvarchar(30)as
    select * from StuInfo 
    where StuId like '%'+@StuId+'%'
    and StuName like '%'+@StuName+'%'
    and Phone like '%'+@Phone+'%'
    and Address like '%'+@Address+'%'
    declare @StuId nvarchar(10),
            @StuName nvarchar(8),
            @Phone nvarchar(10),
            @Address nvarchar(30)
    set  @StuId='1' 
    set  @StuName=''
    set  @Phone=''
    set  @Address=''exec pr_Info @StuId,
                 @StuName,
                 @Phone,
                 @Address
    不知道这样是不是符合你的要求,不一样的地方自己再去改变一下
      

  3.   

    gerrylc(lc) ,soulwin(铁血汉子) 首先要在这里谢谢你们了,我准备不是模糊查询,也许我上面说的不是很明白,就象学生表,查看这个表的人不同,查询的方式也就不一样,有的人会用'STUNAME'和'PHONE'来查询,有的人会用'ADDRESS'来查询,这些都是不一定的,我准备做的就是用户输入任意一个或几个参数就能完成查询,谢谢你们!
      

  4.   

    那你是要在SQL中完成这个功能,还是要在你的界面上完成呢?
    要是在界面上完成的话就很好解决了....
      

  5.   

    如果是在界面上完成的话,这个例子可以看下的,(用的DELPHI)procedure TForm1.Button1Click(Sender: TObject);
    var
    sqltext:string;
    begin
     sqltext:='select * from StuInfo where';
     if edit1.text='' then //输入StuId
     sqltext:=sqltext+' StuId like ''%''' //由于这里的数据类型integer 就会出错的,自己
                                           考虑一下,或者将StuId改为varchar型
     else
     sqltext:=sqltext+format('  StuId=''%s''',[strtoint(edit1.text)]);if edit2.text='' then  //输入StuName
     sqltext:=sqltext+' and StuName like ''%'''
     else
     sqltext:=sqltext+format(' and StuName=''%s''',[edit2.text]);if edit3.text='' then   //输入phone
     sqltext:=sqltext+' and phone like ''%'''
     else
     sqltext:=sqltext+format(' and phone=''%s''',[edit3.text]);if edit4.text='' then   //输入Address
     sqltext:=sqltext+' and Address like ''%'''
     else
     sqltext:=sqltext+format(' and Address=''%s''',[edit4.text]); self.ADOQuery1.Close;
     self.ADOQuery1.SQL.Clear;
     self.ADOQuery1.SQL.Add(sqltext);
     self.ADOQuery1.Open;
    end;
      

  6.   

    准备在后台就完成,前台用ASP.NET做
      

  7.   

    zhao606(奋) 我想到用动态查询了,但是没想到怎么做啊
      

  8.   

    哦,ASP.NET没接触过,不好意思啊,呵呵
      

  9.   

    gerrylc(lc) 谢谢你了,第一次在这里提问,真的感觉这里的学习气氛很好,以后经常在这里和大家交流了
      

  10.   

    gerrylc(lc) 可以问一下你得msn么?或者你加我 [email protected]