Ich benutze das
DELETE TableA
FROM TableA a
INNER JOIN
TableB b on b.Bid = a.Bid
AND [condition]
und @TheTXI Weg ist gut, wie genug, aber ich Antworten und Kommentare lesen und ich fand ein Dinge muss beantwortet werden, ist mit Bedingung in WHERE-Klausel oder als Join-Bedingung. Also habe ich beschlossen, es zu testen und ein Snippet zu schreiben, aber ich habe keinen bedeutenden Unterschied zwischen ihnen gefunden. Sie können das Sql-Skript hier sehen und der wichtige Punkt ist, dass ich es vorgezogen habe, es als Kommnet zu schreiben, weil es keine exakte Antwort ist, aber es ist groß und kann nicht in die Kommentare geschrieben werden, bitte entschuldigen Sie mich.
Declare @TableA Table
(
aId INT,
aName VARCHAR(50),
bId INT
)
Declare @TableB Table
(
bId INT,
bName VARCHAR(50)
)
Declare @TableC Table
(
cId INT,
cName VARCHAR(50),
dId INT
)
Declare @TableD Table
(
dId INT,
dName VARCHAR(50)
)
DECLARE @StartTime DATETIME;
SELECT @startTime = GETDATE();
DECLARE @i INT;
SET @i = 1;
WHILE @i < 1000000
BEGIN
INSERT INTO @TableB VALUES(@i, 'nameB:' + CONVERT(VARCHAR, @i))
INSERT INTO @TableA VALUES(@i+5, 'nameA:' + CONVERT(VARCHAR, @i+5), @i)
SET @i = @i + 1;
END
SELECT @startTime = GETDATE()
DELETE a
--SELECT *
FROM @TableA a
Inner Join @TableB b
ON a.BId = b.BId
WHERE a.aName LIKE '%5'
SELECT Duration = DATEDIFF(ms,@StartTime,GETDATE())
SET @i = 1;
WHILE @i < 1000000
BEGIN
INSERT INTO @TableD VALUES(@i, 'nameB:' + CONVERT(VARCHAR, @i))
INSERT INTO @TableC VALUES(@i+5, 'nameA:' + CONVERT(VARCHAR, @i+5), @i)
SET @i = @i + 1;
END
SELECT @startTime = GETDATE()
DELETE c
--SELECT *
FROM @TableC c
Inner Join @TableD d
ON c.DId = d.DId
AND c.cName LIKE '%5'
SELECT Duration = DATEDIFF(ms,@StartTime,GETDATE())
Wenn Sie gute Gründe für dieses Skript finden oder ein anderes nützliches Skript schreiben konnten, teilen Sie es bitte mit. Danke und hoffen, dass dies helfen.