Warum kann meine Select @variable abrufen?

IchHH

Datenbank-Guru
Beiträge
284
Hallo, weiß jemand von euch warum man im Select keine Spalte über eine Variable aufrufen kann?

Ich stellte mir das wie folgt vor:

Code:
DECLARE    @kopf varchar(100)
SET @kopf = (Select Case When DateName(dw,GetDate()) = 'Montag'
                Then 'Saldo vom ' + Convert([nvarchar](10),DateAdd(day,0,GetDate()),104)
                Else 'Saldo vom ' + Convert([nvarchar](10),DateAdd(day,0,GetDate()),104) End)
SELECT     [DOM1\20-DIAS].S_92620.*, @kopf
FROM         [DOM1\20-DIAS].tmp INNER JOIN
                      [DOM1\20-DIAS].S_92620 ON [DOM1\20-DIAS].tmp.Kontenart = [DOM1\20-DIAS].S_92620.Kontenart
 
Werbung:
Vermutlich weil auch in M$SQL der Planner erst einmal einen Abfrageplan erstellt, den er dann ausführt. Dazu muß er bei der Erstellung des Planes bereits alle nötigen Informationen haben, insbesondere auch, welche Spalten abzufragen sind (auch wenn in Deinem IF ... THEN ... ELSE ... Then und Else gleich sind, wie mir scheint.
 
Das war keine Lösung für mein Problem ;)

Ich habe versucht mittels
Select COLUMN_NAME FROMINFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME ='S_92620'
die Spalten zu ermitteln -> läuft. Sobald ich das aber in einer Variablen tue wie zum Beispiel

Declare @test varchar (5000)
Set @test = (Select COLUMN_NAME FROMINFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME ='S_92620') oder
Set @test = 'Select COLUMN_NAME FROMINFORMATION_SCHEMA.COLUMNSWHERE TABLE_NAME ='S_92620''

funktioniert es nicht mehr diese in einer Select Abfrage einzubauen.

Das die If THEN ELSE abfrage gleich aussieht ist nur zu Testzwecken, nachher würde ich minus x Tage in Then und minus XX Tage in Else verbauen.
 
Wenn Du ein SQL so zusammenstellst, dann ist das ein dynamisches SQL und muß via EXECUTE ausgeführt werden. Dieses muß dann vollständig aufgelöst sein, damit die Syntax geprüft und der Planner einen Plan erstellen kann. Das ist sehr sicher auch bei M$SQL so, auch wenn ich das nicht nutze.
 
Du hast ja auch nach dem "Warum" gefragt und nicht nach einer "Problemlösung". Warum das technisch so ist kann ich dir auch nicht erklären, aktschmer hat das ja schon versucht, genauer weiß ich das auch nicht. Fakt ist das kein SQL Server Variablen, Unterabfragen oder Funktionen anstelle von expliziten Tabellen- oder Spaltennamen oder sogar anstelle von Schlüsselwörtern annimmt.
 
Leider wurde die Lösung genannt und nicht aufgezeigt, aber es war das erste Mal das ich verstanden haben was gemeint war und ich auch gelöst bekommen haben.

Wenn du nun noch eine Idee hast wie ich den letzten und vorletzten Spaltennamen ermitteln kann, bin ich ein großen Schritt vorangekommen heute.
 
Mal so als Zwischenbemerkung: mir scheint, Du machst grundlegende Fehler im Umgang mit einer relationalen Datenbank. Möglicherweise suchst Du eher eine Tabellenkalkulation.
 
Das verstehe ich nicht. Es ist schon von mir so gedacht, dass ich die SQL Datenbank für eine Tabellenkalkulation nutze, auch wenn diese dafür nicht vorgesehen ist.
 
Hast du aber eine Lösung für mein Problem? Über "Where" kann ich nicht gehen, da ich auch gleich zwei Datenbanken miteinander verknüpft habe.
 
Werbung:
Zurück
Oben