Ich habe eine WITH
-Anweisung, die die Daten sammelt, die ich möchte. Was ich tun möchte, ist eine SELECT
aus verschiedenen Teilen meiner WITH
und INSERT
, die in eine Zieltabelle führen können.Konnte keine Tabelle nach einer WITH-Anweisung löschen
ist hier eine vereinfachte Version meiner langen Abfrage:
WITH Active AS (
--SELECT 1
),
Inactive AS (
--SELECT 2
),
Churn AS (
--SELECT 3
)
--Drop destination table if exists
IF OBJECT_ID('DestinationTable', 'u') IS NOT NULL DROP TABLE DestinationTable;
SELECT Active.Name, Inactive.Name,Churn.Id
INTO DestinationTable
FROM Active a
JOIN Inactive i ON a.Id = i.Id
JOIN Churn c ON a.Id = c.Id;
Aber SQL Server hat eine IF
Anweisung direkt nach einer WITH
nicht zulassen. Ich möchte die IF
nicht vor meiner WITH
verschieben, weil dann wahrscheinlich meine Zieltabelle für eine lange Zeit leer sein wird.
Einfache Version meiner Frage:
Wie kann ich ein SELECT
aus einer WITH
Anweisung in einer anderen Tabelle schreiben?
Warum nicht einfach Ihre DestinationTable abschneiden, anstatt sie zu löschen und neu zu erstellen? Wäre viel einfacher und weniger ressourcenintensiv. –
Es klingt, als ob Sie versuchen, "neuere" zwischengespeicherte Ergebnisse aus der langen Abfrage für die Verwendung an anderer Stelle beizubehalten. Sie könnten eine Spalte zu "DestinationTable" hinzufügen, um eine Seriennummer aufzuzeichnen, die Sie jedes Mal erhöhen, wenn Sie Ihre "lange Abfrage" ausführen. Danach löschen Sie alle Zeilen mit einer niedrigeren Seriennummer. Code, der die Daten verwendet, sollte immer Zugriff auf einen vollständigen Satz haben, der durch eine gemeinsame Seriennummer identifiziert wird. (Berücksichtigen Sie Ihre Transaktionen wie für Ihre Anwendung erforderlich.) – HABO