【问题标题】:Parameters in Procedure not working过程中的参数不起作用
【发布时间】:2017-03-08 05:21:05
【问题描述】:

我创建了以下查询:

    SELECT Title, sum(No_Of_Copies) as 'Total Copies'
    FROM BOOK_COPIES bc
    join BOOK_AUTHORS ba
    on bc.BookId=ba.BookId
    join BOOK b
    on b.BookId=bc.BookId
    join LIBRARY_BRANCH lb
    on bc.BranchId=lb.BranchId where AuthorName='George Orwell' and BranchName='Central'
    group by b.Title

从这个查询中,我想创建一个可以搜索任何作者或分支名称的书籍副本数量的过程,所以我创建了这个:

    CREATE PROC GetTotalCopies @AuthorName varchar(100), @BranchName varchar(100)
    AS

       SELECT Title, sum(No_Of_Copies) as 'Total Copies'
       FROM BOOK_COPIES bc
       join BOOK_AUTHORS ba
       on bc.BookId=ba.BookId
       join BOOK b
       on b.BookId=bc.BookId
       join LIBRARY_BRANCH lb
       on bc.BranchId=lb.BranchId where AuthorName='@AuthorName' and BranchName='@BranchName'
       group by b.Title

但是当我使用作者姓名和分支名称运行它时,我得到了空表。有谁知道为什么? 我从以下流程图创建了这个数据库: https://www.learncodinganywhere.com/learningmanagementsystem/links/07_DB/SQL_Drill.pdf 使用 SQL Server 2008。

【问题讨论】:

    标签: sql sql-server procedure


    【解决方案1】:

    不需要单引号。参数已经是字符串。

    所以,这样写查询:

    where AuthorName = @AuthorName and BranchName = @BranchName
    

    注意:您可能需要考虑作为“所有值”起作用的参数:

    where (AuthorName = @AuthorName or @AuthorName is null) and
          (BranchName = @BranchName or @BranchName is null)
    

    【讨论】:

    • 由于某种原因,即使没有字符串,第一个 where 子句也不起作用。但是你给我的第二个 where 子句效果很好!谢谢!
    【解决方案2】:

    删除参数周围的单引号。它将参数作为字符串文字。虽然参数是字符串类型,但参数在求值时不需要单引号

    where AuthorName=@AuthorName and BranchName=@BranchName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-06
      • 2019-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多