使用带参数的存储过程删除行

时间:2012-08-07 12:44:44

标签: stored-procedures sql-server-2008-r2

我正在使用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 =@ID

GO

这是我尝试创建时遇到的错误:

  

Msg 156,Level 15,State 1,Procedure sp_deleteDecision,Line 6
  关键字'附近的语法不正确为'。
  消息156,级别15,状态1,过程sp_deleteDecision,第8行
  关键字'附近的语法错误为'。

请注意,将DELETE FROM更改为

SELECT * FROM 

它有效。

甚至可以使用参数删除某些内容吗?

1 个答案:

答案 0 :(得分:10)

您不能在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 =@ID

GO

对于更复杂的查询,您可能希望使用别名,但请注意(令人困惑),DELETE将包含两个 FROM条款 - 您可以只在第二个中引入别名:

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