1

我有两个输入文本框:-书名和作者

我正在尝试使用存储过程在图书馆管理系统中进行搜索。程序是:

ALTER PROCEDURE dbo.Library_AdvSearch
    (
        @BookName varchar(50),
        @Author varchar(50)

    )
AS
    Select * from Library_Book 
    where ( BookName Like '%'+ @BookName +'%' OR Author Like '%'+@Author+'%')

RETURN

这会产生歧义结果并显示与表相关的所有数据

现在我的问题是:我想重新设计我的查询,如果我不在 Bookname 中插入任何值,只定义作者,它应该向我显示相应的表条目

我的桌子看起来像

BOOk name|Author
C        |qwerty
let us C |asdfg
java     |xyz

现在如果我只输入 xyz ,它应该在 gridview 中显示 java 和 xyz

所以请在商店程序中帮助我

任何帮助将不胜感激

4

3 回答 3

2

尝试这个

ALTER PROCEDURE dbo.Library_AdvSearch
(
    @BookName varchar(50) = '',
    @Author varchar(50) = ''
)
AS
Select * from Library_Book 
WHERE((@BookName = '' OR BookName Like '%'+ @BookName +'%')
AND (@Author = '' OR Author Like '%'+@Author+'%'))

RETURN
于 2013-06-12T12:11:22.053 回答
0

如果你@BookName留空,你基本上是在搜索BookName Like '%',换句话说:所有的书。

我会用一个参数:

select * from Library_Book 
where ( BookName Like '%'+ @Parameter +'%' OR Author Like '%'+ @Parameter +'%')
于 2013-06-12T12:15:10.577 回答
0

如果我理解正确,问题是匹配所有书籍/作者,当它们为空白并且您想排除它们时。因此,将 OR 更改为 AND,使其符合所有标准。不知道我是否正确理解了你。

ALTER PROCEDURE dbo.Library_AdvSearch
        (
            @BookName varchar(50),
            @Author varchar(50)

        )
    AS
        Select * from Library_Book 
        where ( BookName Like '%'+ @BookName +'%' AND Author Like '%'+@Author+'%')

    RETURN
于 2013-06-12T12:26:02.593 回答