簡體   English   中英

存儲過程-使用聯接從表中刪除

[英]Stored Procedure - delete from table with joins

我正在嘗試學習SQL,但是存儲過程遇到了問題。 我有一個如圖所示的表結構,其中Repair.RepairerIdRepair.CarId是相應表的外鍵。

數據庫結構

我需要做的是創建一個存儲過程,使用戶可以從表Repair中刪除實體,用戶可以在其中選擇汽車型號和Microsoft SQL Server 2017中的維修者名稱。

現在,我有下一個代碼:

CREATE PROCEDURE [dbo].[DeleteRepairInfo]
    @Name nvarchar(MAX),
    @Model nvarchar(MAX)
AS
    DELETE Repair.*
    FROM Repair INNER JOIN Repairer ON Repair.RepairerId = Repairer.Id
                INNER JOIN Car ON Repair.CarId = Car.Id
    WHERE Car.Model LIKE @Model AND Repairer.Name LIKE @Name
GO

但是Visual Studio 2017中的SQL編輯器給我錯誤:

SQL46010:..附近的語法不正確

同樣,所有INNER JOIN語句及其=符號以及單詞LIKEAND和最后的LIKE均為灰色。 (我不確定這是否可以)。

您可以在下一張圖片上看到:

在此處輸入圖片說明

我將邏輯寫為:

CREATE PROCEDURE [dbo].[DeleteRepairInfo] (
    @Name nvarchar(MAX),
    @Model nvarchar(MAX)
) AS
BEGIN
    DELETE r
    FROM Repair r INNER JOIN
         Repairer rr
         ON r.RepairerId = rr.Id INNER JOIN
         Car c
         ON r.CarId = c.Id
    WHERE c.Model LIKE @Model AND rr.Name LIKE @Name;
END;  -- DeleteRepairInfo

查詢的問題是語法Repair.* 那是無效的。 注意其他一些事項:

  • 這引入了表別名,因此查詢更易於編寫和閱讀。
  • 存儲過程的主體由BEGIN / END包圍,因此很容易看到。
  • 用存儲過程的名稱注釋END
  • 參數用括號括起來。

這些都是“可選的”。 但是編寫清晰的代碼是學習的好習慣。

你好嗎?

我認為問題是您沒有正確使用DELETE

以下示例將為您提供幫助!

CREATE PROCEDURE [dbo].[DeleteRepairInfo]
    @Name nvarchar(MAX),
    @Model nvarchar(MAX)
AS
    DELETE FROM Repair as R
    WHERE R.CarId in (select CarId from Car where Model = @Model) 
    and R.RepairerId in (select RepairerId from Repairer where Name = @Name)        
GO

假設您可以擁有1輛以上相同型號的汽車和1輛以上相同名稱的維修商!

祝好運 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM