【问题标题】:Getting a value to return once string is found找到字符串后获取要返回的值
【发布时间】:2019-04-28 18:43:07
【问题描述】:

如果在表中找到 ISBN,我需要让 @r 返回值 1。

作业问题:创建一个名为 FindABookbyISBN 的过程。它接受一个类型为 varchar(20) 的参数 @value,即某人正在寻找的 ISBN。如果程序找到该书,则显示该书信息并返回 1。如果未找到该书,该程序将打印类似“Cannot find book”之类的内容并返回 0。

消息应如下所示:

用 isbn 9780393248968 找到书

1

找不到带有 isbn 9780393248968 的书

0


IF OBJECT_ID ('FindABookbyISBN') IS NOT NULL
    DROP PROCEDURE FindABookbyISBN

GO
CREATE PROCEDURE FindABookbyISBN @ISBN varchar(20) AS

IF EXISTS (SELECT * FROM BookInfo WHERE ISBN = @ISBN)
    BEGIN 
    PRINT 'Found book with ISBN ' + @ISBN

END

ELSE

BEGIN
    PRINT 'Cannot find book with ISBN ' + @ISBN

END

GO

--testing procedure

--success

Declare @r int

EXEC @r = FindABookByISBN '9780393248968'

Print @r

--failure

Declare @t int

EXEC @t = FindABookByISBN '1234' 

Print @t

【问题讨论】:

  • 您的存储过程没有返回状态值。
  • 哦!非常感谢。我知道这很简单。感谢您的意见!

标签: sql sql-server stored-procedures printing


【解决方案1】:

Gordon Linoff 在评论部分回答了我的问题。

我只需为其添加一个返回值。

IF EXISTS (SELECT * FROM BookInfo WHERE ISBN = @ISBN)
    BEGIN 
    PRINT 'Found book with ISBN ' + @ISBN
    Return 1
    END
    ELSE
    BEGIN
    PRINT 'Book was not found with ISBN ' + @ISBN
    END

GO

【讨论】:

  • 你的作业题不太好。事实上的模式是返回零表示成功,返回非零表示错误/警告。未找到条件应返回 1 值。
  • 很高兴你提出这个问题。这让我很困惑。所以我的老师最终提供了信息应该是什么样子,就像你说的那样。她的例子:“找到 ISBN 9780393248968...0 的书”“找不到 ISBN 1234...1 的书”。但是问题的措辞似乎她在这里寻找相反的内容。我想她可能做了一个错误。什么是事实上的模式?
  • 忽略事实上的问题。你认为我有这个混淆吗?感谢您的帮助!
  • 在没有看到实际问题的情况下,我不能说你是否混淆了你的作业:-) 如果问题与列出的相同,那么她就倒退了。我只是建议实际遵循的模式,这可能与学术界有所不同。这将是一个在课堂上讨论的好话题。
  • 是的,我肯定会在星期一提出。再次感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2017-06-14
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多