2013-03-20 47 views
0

我在創建使用特定月份和年份作爲輸入周長的存儲過程時遇到問題。執行查詢時,具有特定月份和年份的存儲過程不能用作輸入參數...?

我需要創建一個名爲sp_products的存儲過程,列出在指定的月份和年份期間訂購的指定產品。產品名稱,月份和年份將作爲存儲過程的輸入參數。從Products表中顯示產品名稱,單價和庫存單位,以及Suppliers表中的供應商名稱。使用以下查詢來測試您的存儲過程以生成下面列出的結果集。

EXEC sp_products '%tofu%', 'December', 1992 

ProductName UnitPrice UnitsInStock Name 
------------------------------ -------------- --------------- ----------------------------------- 

這是我寫的查詢成功執行的代碼。

但是,當我跑了

EXEC sp_products '%tofu%', 'December', 1992 

我收到錯誤消息。

CREATE PROCEDURE sp_products 
    (@product VARCHAR(40), 
@month DATETIME = 'December', 
@year DATETIME = 1992 
    ) 
AS 
    SELECT    
     P.ProductName, P.UnitPrice, P.UnitsInStock, 
     S.Name 
    FROM 
     Products P 
    INNER JOIN 
     Suppliers S ON P.SupplierID = S.SupplierID 
    WHERE 
     P.SupplierID = @product 

需要幫助..... !!!!

+0

你確定你在使用MySQL嗎?我認爲它是'SQL Server'。 – 2013-03-20 05:19:50

+2

你會得到什麼錯誤信息? – 2013-03-20 05:23:45

+1

備註:您應該**不要**爲存儲過程使用'sp_'前綴。微軟已經保留了這個前綴以供自己使用(參見*命名存儲過程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你將來有可能冒着名字衝突的風險。 [這對你的存儲過程性能也不好](http://sqlserverpedia.com/blog/sql-server-bloggers/stored-procedure-performance-using-%E2%80%9Csp_%E2%80%9D-prefix- %E2%80%93-神話或-事實/)。最好只是簡單地避免使用'sp_'並將其他內容用作前綴 - 或者根本沒有前綴! – 2013-03-20 06:00:15

回答

0

可以cantenate在存儲過程的模式,

CREATE PROCEDURE sp_products 
(   
    @product VARCHAR(40), 
    @month DATETIME, 
    @year DATETIME 
) 
AS 
SELECT P.ProductName, 
     P.UnitPrice, 
     P.UnitsInStock, 
     S.Name 
FROM Products P 
     INNER JOIN Suppliers S 
      ON P.SupplierID = S.SupplierID 
WHERE P.SupplierID = '%' + @product + '%' 

GO 

執行PROC,

EXEC sp_products 'tofu', 'December', 1992 

後續問題:什麼是使用@month@year參數?

相關問題