【问题标题】:Deleting rows using stored procedure with parameter使用带参数的存储过程删除行
【发布时间】:2012-08-07 12:44:43
【问题描述】:

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

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

消息 156,级别 15,状态 1,过程 sp_deleteDecision,第 6 行
关键字“as”附近的语法不正确。
消息 156,级别 15,状态 1,过程 sp_deleteDecision,第 8 行
关键字“as”附近的语法不正确。

请注意,将DELETE FROM 更改为

SELECT * FROM 

它有效。

甚至可以使用参数删除一些东西吗?

泰。

【问题讨论】:

  • 问题是别名,只有在使用连接时才使用别名...
  • 您在哪里看到以这种方式删除使用AS 的语法?遇到这个错误的时候看the official documentation for the DELETE command了吗?
  • 不,我正在查看存储过程页面。我没有意识到添加别名会导致问题。

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


【解决方案1】:

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

【讨论】:

  • 在您的第二个示例中,我通常会省略第一个 FROM
  • 感谢您的快速回复。我删除了别名,它现在可以工作了。我放心了;谢谢!
  • 别名可以在删除中使用,但它过于复杂了。示例 从表中删除 a where column=@id
猜你喜欢
  • 2021-09-17
  • 2023-04-07
  • 2014-05-25
  • 2011-08-27
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
相关资源
最近更新 更多