2012-08-07 32 views
2

我正在使用SQL Server 2008 R2,並且我想創建一個使用參數(id)從兩個表中刪除的存儲過程。使用帶參數的存儲過程刪除行

這是存儲過程:

CREATE PROCEDURE [dbo].[sp_deleteDecision] 
@ID int 
AS 

DELETE FROM [dbo].[tblDecisionInvolvement] as di 
WHERE di.DecisionId = @ID 
DELETE FROM [dbo].[tblDecision] as d 
WHERE d.Id [email protected] 

GO 

這是我的錯誤,當我嘗試創建它:

消息156,級別15,狀態1,過程sp_deleteDecision,6號線
關鍵字'as'附近的語法不正確。
Msg 156,Level 15,State 1,Procedure sp_deleteDecision,Line 8
關鍵字'as'附近的語法不正確。

注意改變DELETE FROM

SELECT * FROM 

它的工作原理。

它甚至可以刪除使用參數的東西嗎?

Ty。

+0

問題是別名,化名只有當你使用聯接... – 2012-08-07 12:48:23

+1

你在哪裏看到用這種方式刪除'AS'的語法?當你遇到這個錯誤時,你看[DELETE命令的官方文檔](http://msdn.microsoft.com/en-us/library/ms189835%28v=sql.100%29.aspx)嗎? – 2012-08-07 12:48:55

+0

不,我正在查看存儲過程頁面。 我沒有意識到添加別名導致了這個問題。 – sander 2012-08-07 12:57:58

回答

11

你不準在DELETE聲明的一部分引入一個別名 - 你也不需要一個在這種情況下:

USE ChessDb01 
GO 
CREATE PROCEDURE [dbo].[sp_deleteDecision] 
@ID int 

AS 

DELETE FROM [dbo].[tblDecisionInvolvement] 
WHERE DecisionId = @ID 
DELETE FROM [dbo].[tblDecision] 
WHERE Id [email protected] 

GO 

對於更復雜的查詢,您可能需要使用別名但請注意,(容易混淆),該DELETE將有 FROM條款 - 你可以只介紹在第二個別名:

DELETE FROM di 
FROM [dbo].[tblDecisionInvolvement] di 
      inner join 
     AnotherTable tab 
      on 
       di.Column = tab.Column2 
WHERE tab.Column99 = @Value 
+1

我通常在第二個例子中忽略了第一個'FROM'。 – 2012-08-07 12:49:33

+0

感謝您的快速回復。我刪除了別名,現在它可以工作。我感到輕鬆多了;謝謝! – sander 2012-08-07 12:50:18

+0

別名可以在刪除中使用,但它只是使複雜。示例從表中刪除a作爲where column = @ id – praveen 2012-08-07 12:51:47