Mithilfe der temporären Tabelle in der where-Klausel

Ich löschen möchte viele Zeilen mit dem gleichen Satz von Feldern, die in einigen (6) Tabellen. Ich könnte dies tun, indem Sie löschen das Ergebnis einer Unterabfrage, die bei jeder Tabelle (Lösung 1), die überflüssig wäre, weil die Unterabfrage wäre jedes mal die gleiche; also will ich das speichern, das Ergebnis der Unterabfrage in eine temporäre Tabelle und löschen Sie den Wert jeder Zeile (von der temp-Tabelle) in den Tabellen (Lösung 2). Welche Lösung ist besser?

Erste Lösung:

DELETE FROM dbo.SubProtocols
WHERE ProtocolID IN (
    SELECT ProtocolID
    FROM dbo.Protocols
    WHERE WorkplaceID = @WorkplaceID
)

DELETE FROM dbo.ProtocolHeaders
WHERE ProtocolID IN (
    SELECT ProtocolID
    FROM dbo.Protocols
    WHERE WorkplaceID = @WorkplaceID
)

// ...

DELETE FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID

Zweite Lösung:

DECLARE @Protocols table(ProtocolID int NOT NULL)

INSERT INTO @Protocols
SELECT ProtocolID
FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID

DELETE FROM dbo.SubProtocols
WHERE ProtocolID IN (
    SELECT ProtocolID
    FROM @Protocols
)

DELETE FROM dbo.ProtocolHeaders
WHERE ProtocolID IN (
    SELECT ProtocolID
    FROM @Protocols
)

// ...

DELETE FROM dbo.Protocols
WHERE WorkplaceID = @WorkplaceID

Ist es möglich Lösung 2, ohne die Unterabfrage? Sagen tun WHERE ProtocolID IN @Protocols (aber syntaktisch korrekten)?

Ich bin mit Microsoft SQL Server 2005.

InformationsquelleAutor Manuel Faux | 2009-07-28
Schreibe einen Kommentar