2017-10-16 192 views
-4

我正在做一些SQL Server的修訂,我有一個問題,我正在努力解決,我打算創建一個存儲過程,顯示分支名稱,書的所有細節代碼和數量,存儲過程採用名爲@BranchName的參數。我也打算使用EXEC以參數的值調用此過程。存儲過程和SQL Server

這是我的發言至今(我知道這是錯的,不工作的某些原因,我不能工作了)

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

首先,標籤。它不是SQL Server就是MySQL,不能兩者兼得。其次,您是否閱讀過有關如何創建存儲過程的文檔?這甚至不是一個有效的語法。 – Eric

+1

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 在ANSI - ** 92 ** SQL標準(** 25年**之前)中將舊式*逗號分隔的表*樣式列表替換爲* proper * ANSI'JOIN'語法不鼓勵使用 –

回答

2

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' 
+0

哦,是的,我看到你的編輯,但是有沒有正確的參數? – Mart00000

+0

是的,它似乎工作良好,只是我使用的WHERE子句是行不通的,因爲Branchname必須將其參數 – Mart00000

+0

更改爲您的喜好.. – maSTAShuFu