bookid bookname booktype author publisher isbn--
create view v_test
as
select bookid,isbn,bookname from ta
union all
select bookid,isbn,booktype from ta
union all
select bookid,isbn,author from ta
union all
select bookid,isbn,publisher from tagoselect ...................

解决方案 »

  1.   

    方法一:select * from tb
    where bookid=Isnull(@bookid,bookid)
    and (@bookname is null or bookname like '%'+@bookname+'%')
    and (@booktype is null or booktype like '%'+@booktype+'%')
    and (@author is null or author like '%'+@author+'%')
    and (@publisher is null or publisher like '%'+@publisher+'%')
    and isbn=Isnull(@isbn,isbn)
    方法二:declare @sql nvarchar(max)
    set @sql = ' select * from tb where 1=1 '
    if(@bookid is not null)
    @sql = @sql + ' and bookid='+@bookid
    if(@bookname is not null)
    @sql = @sql + ' and bookname like ''%'+@bookid+'%'' '
    if...
    ...exec(@sql)另外,like非常影响查询效率,甚用。
      

  2.   

    你这个用途应该在客户端直接处理或使用储存过程来实现就可以了..
    1.你必须明细这些条件的关联性,确定是不是只要录入了内容同时满足才返回?还是只要任意一个满足也返回.
    2.写个储存过程给你,这样客户端只要传入参数即可.Create Procedure QueryBook
     @bookid nvarchar(20),
     @bookname nvarchar(20),
     @booktype nvarchar(20),
     @author nvarchar(20),
     @publisher nvarchar(20),
     @isbn nvarchar(20)
    as
    Declare @QueryString nvarchar(1000)
    Set @QueryString=''if IsNull(@bookid,'')<>''
    Set @QueryString=@QueryString+' bookid=''' +@bookid+''''if IsNull(@bookname,'')<>''
    Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' bookname Like ''%' +@bookname+'%'''if IsNull(@booktype,'')<>''
    Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' booktype Like ''%' +@booktype+'%'''if IsNull(@author,'')<>''
    Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' author Like ''%' +@author+'%'''if IsNull(@publisher,'')<>''
    Set @QueryString=@QueryString+ when case @QueryString='' then '' else ' And ' end +' publisher Like ''%' +@publisher+'%'''if IsNull(@isbn,'')<>''
    Set @QueryString=@QueryString+' isbn=''' +@isbn+''''
    Set @QueryString='select * from book where ' + @QueryString
    -- 返回查询结果
    exec (@QueryString)
    go
      

  3.   


    CREATE PROC Book
    (
     @bookid nvarchar(20),
     @bookname nvarchar(20),
     @booktype nvarchar(20),
     @author nvarchar(20),
     @publisher nvarchar(20),
     @isbn nvarchar(20))
    AS
     SET NOCOUNT ON
      
      DECLARE @sql nvarchar(4000)
    SET @sql='SELECT * FROM tbname WHERE 1=1'
    +CASE WHEN @bookid IS NULL THEN '' ELSE ' AND bookid=@bookid' END
    +CASE WHEN @bookname IS NULL THEN '' ELSE ' AND bookname=@bookname' END
    +CASE WHEN @booktype IS NULL THEN '' ELSE ' AND booktype=@booktype' END
    +CASE WHEN @author IS NULL THEN '' ELSE ' AND author=@author' END
    +CASE WHEN @publisher IS NULL THEN '' ELSE ' AND publisher=@publisher' END
    +CASE WHEN @isbn IS NULL THEN '' ELSE ' AND isbn=@isbn' END
    EXEC sp_executesql @sql,N'
    @bookid nvarchar(20),
            @bookname nvarchar(20),
            @booktype nvarchar(20),
            @author nvarchar(20),
            @publisher nvarchar(20),
            @isbn nvarchar(20)
    ',@bookid,@bookname,@booktype,@author,@publisher,@isbn
    GO
      

  4.   

    应该是这样;没看到是模糊查询CREATE PROC Book
    (
     @bookid nvarchar(20),
     @bookname nvarchar(20),
     @booktype nvarchar(20),
     @author nvarchar(20),
     @publisher nvarchar(20),
     @isbn nvarchar(20))
    AS
     SET NOCOUNT ON
      
      DECLARE @sql nvarchar(4000)
    SET @sql='SELECT * FROM tbname WHERE 1=1'
    +CASE WHEN @bookid IS NULL THEN '' ELSE ' AND bookid=@bookid' END
    +CASE WHEN @bookname IS NULL THEN '' ELSE ' AND bookname like ''%'+@bookname+'%''' END
    +CASE WHEN @booktype IS NULL THEN '' ELSE ' AND booktype like ''%'+@booktype+'%''' END
    +CASE WHEN @author IS NULL THEN '' ELSE ' AND author like ''%'+@author+'%''' END
    +CASE WHEN @publisher IS NULL THEN '' ELSE ' AND publisher like '%''+@publisher+'%''' END
    +CASE WHEN @isbn IS NULL THEN '' ELSE ' AND isbn like '%''+@isbn+'%''' END
    EXEC sp_executesql @sql,N'
    @bookid nvarchar(20),
            @bookname nvarchar(20),
            @booktype nvarchar(20),
            @author nvarchar(20),
            @publisher nvarchar(20),
            @isbn nvarchar(20)
    ',@bookid,@bookname,@booktype,@author,@publisher,@isbn
    GO