Ich brauche entweder Kategorien A und B von Datensätzen in eine #temptable einzufügen, in Abhängigkeit von bestimmten ZustandIF ... ELSE ... zwei sich gegenseitig ausschließende Einsätze in #temptable
Meine Pseudo-Code:
IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1;
IF {some-condition}
SELECT {columns}
INTO #t1
FROM {some-big-table}
WHERE {some-filter}
ELSE
SELECT {columns}
INTO #t1
FROM {some-other-big-table}
WHERE {some-other-filter}
Die beiden obigen SELECTs sind exklusiv (garantiert vom ELSE-Operator). Allerdings versucht SQL-Compiler mich auszutricksen und wirft die folgende Meldung:
There is already an object named '#t1' in the database.
Meine Vorstellung von „Fixing“ dieses # t1 im Voraus und dann Ausführen eines einfachen INSERT INTO (anstelle von SELECT ... INTO) zu erstellen ist . Aber ich mag Minimalismus und frage mich, ob dies auf einfachere Weise erreicht werden kann, d. H. Ohne explizite CREATE TABLE # t1 im Voraus.
Btw warum gibt es mir keinen Fehler auf einer bedingten DROP TABLE in der ersten Zeile? Ich frage mich nur.
Um Ihre letzte Frage zu beantworten; die "DROP TABLE # t1" wird nur ausgeführt, wenn die "IF" -Anweisung wahr zurückgibt, d. h. die Tabelle existiert. Wie Sie sagen, dass Sie vereinfachen möchten, könnten Sie das in 'IF EXISTS (OBJECT_ID ('tempdb .. # t1')) DROP TABLE # t1;'. –
@PatrikBirgersson Ich verstehe es! Ich habe mich jedoch nicht gefragt, wie ich diese bestimmte Codezeile vereinfachen könnte. Es ging vielmehr um Inkonsistenz zwischen der Möglichkeit, eine bedingte SELECT ... INTO #TempTabelle ... in einem verzweigten IF ... ELSE-Block auszuführen, anstatt eine bedingte DROP-Operation einer #TempTable in der ersten Zeile ausführen zu können. Rajeshs Antwort löscht hier alle meine Zweifel. –