IF-statement bei Einfügen mit 'mit'

Ich habe folgende Abfrage:

;WITH tbldata as ( SELECT a, b FROM Some_Table ) INSERT INTO Target_Table(column1, column2) SELECT a,b FROM tbldata 

Ich möchte die Eintragung bedingungsweise machen:

 ;WITH tbldata as ( SELECT a, b FROM Some_Table ) IF @insert = 1 INSERT INTO Target_Table(column1, column2) SELECT a,b FROM tbldata ELSE SELECT a,b FROM tbldata 

aber ich bekomme einen Fehler: Incorrect syntax near the keyword 'IF'.

Wie würde ich das lösen? Ich habe über alles nachgedacht

 ;WITH tbldata as ( SELECT a, b FROM Some_Table ) INSERT INTO TEMP_Table(column1, column2) SELECT a,b FROM tbldata --effectively dumping it in a temptable before deciding whether to insert or view it IF @insert = 1 INSERT INTO Target_Table(column1, column2) SELECT a,b FROM TEMP_Table ELSE SELECT a,b FROM tbldata 

aber irgendwie sieht das mir schmutzig aus. Vorschläge? Oder beaufsichtige ich s'thing?

Ich bin gespannt auf Ihre Anregungen!

Was Sie brauchen, sind lokal definierte viewen. Leider hat SQL server sie nicht. Ein CTE kann nur einer Abfrage angehören, er kann nicht geteilt werden. Das bedeutet, dass Sie eines der folgenden Schritte ausführen müssen:

  1. Duplizieren Sie den CTE zu beiden Zweigen der IF
  2. Definiere eine view
  3. Definieren Sie eine Tabellenwertfunktion
  4. Kopiere den Inhalt des CTE in eine temporäre Tabelle oder eine Tabellenvariable, um Duplizierung zu vermeiden