【问题标题】:Stored Procedures & SQL Server存储过程和 SQL Server
【发布时间】:2017-10-16 22:22:46
【问题描述】:

我正在 SQL Server 中进行一些修订,并且我有一个我正在尝试解决的问题,我打算创建一个存储过程来显示分支名称、书籍代码和数量的所有详细信息手,存储过程采用名为@BranchName 的参数。我还打算使用EXEC 来调用这个带有参数值的过程。

这是我目前为止的陈述(我知道这是错误的,并且由于某种原因不起作用,我无法解决)

CREATE PROCEDURE BranchDetails
    SELECT 
        B.BookCode, BR.BranchName, I.OnHand
    FROM 
        BOOK, BRANCH, INVENTORY
    WHERE 
        BranchName = 'BookCode'

【问题讨论】:

  • 首先,正确标记。它是 SQL Server 或 MySQL,不能两者兼而有之。其次,您是否阅读过有关如何创建存储过程的文档?这甚至不是一个有效的语法。
  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(25 年前),不鼓励使用它

标签: sql sql-server stored-procedures


【解决方案1】:

MSSQL 语法

-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
    -- Add the parameters for the stored procedure here
    <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
    <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO

解决您的问题。

CREATE PROCEDURE BranchDetails @BranchCode varchar(20)
as 
BEGIN

SELECT B.BookCode, BR.BranchName, I.OnHand
FROM BOOK, BRANCH, INVENTORY
WHERE BranchCode = @BranchCode

END

执行

exec BranchDetails 'Disneyland'

【讨论】:

  • 哦,是的,我看到了您的编辑,但是作为参数是否正确?
  • 是的,它似乎工作得很好,只是我使用的 WHERE 子句不起作用,因为 Branchname 必须是参数
  • 谢谢大家,你知道如何在这个场景中添加一个触发器来检查一本书的价格没有增加超过图书成本的 10% 吗?只使用 BOOK 表?
  • 触发器仅通过 DML 激活。您将不得不创建另一个 OP
  • 供您参考...避免使用旧式连接。显式声明连接的类型
猜你喜欢
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2011-09-22
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多