![](/img/trans.png)
[英]Stored Procedure to delete records in a table from values in another table
[英]Stored Procedure - delete from table with joins
我正在嘗試學習SQL,但是存儲過程遇到了問題。 我有一個如圖所示的表結構,其中Repair.RepairerId
和Repair.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
語句及其=
符號以及單詞LIKE
, AND
和最后的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.