Code ermittelt nicht letzte Spalte

IchHH

Datenbank-Guru
Beiträge
284
Hallo Ihr lieben, ich bin mal wieder aktiv und scheitere an folgende Frage:

Warum ermittelt der nachfolgende code nicht die letzte Spalte sondern gibt als Antwort "NULL" zurück?

Code:
SELECT max(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '[DOM1\20-DIAS].[tmp3]'

Sie Spalten sind als numeric bzw. decimal vorhanden und richtig wäre das er "tmp" ermittelt. Das könnte ich zwar nun dareinschreiben aber spätestens dann wenn ich die Vorletzte Spalte ermitteln möchte deren Name variable ist würde das mit deinem "-1" hinter dem Code nicht mehr klappen.

Weiß jemand warum der Code nicht klappt?
 
Werbung:
die Spalte ist ein INT. Wenn da für max(integer) nichts kommt, dann findet er via Where-Condition nix. Würde da was kommen, wäre es aber garantiert nicht 'tmp'.
 
Verstehe. Um die Ursache zu finden, habe ich mal geschaut was passiert wenn die Where Bedingung anwendung findet. Dazu habe ich

Code:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '[DOM1\20-DIAS].[tmp3]'

genutzt. Interessanterweise kommt dabei kein Ergebniss raus. Nun weiß ich das es an der Where Bedingung liegt, nicht aber warum oder wie ich das Problem beseitige. Wie ist hier die Vorgehensweise?
 
Hallo Chuky,

das tue ich normalerweise auch. Der Code sieht normalerweise wie folgt aus:

Code:
SET     @tabelle = '[DOM1\20-DIAS].[tmp3]'
SET     @ordinal = ( SELECT max(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle )
SET     @letzte_spalte = ( SELECT max(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle AND ORDINAL_POSITION = @ordinal )
SET     @vorletzte_spalte = ( SELECT distinct COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle AND ORDINAL_POSITION = @ordinal - 1 )
SET        @query3 = 'UPDATE [' + @tabelle + '] SET tmp = isnull([' + @letzte_spalte + '],0) + isnull([' + @vorletzte_spalte + '],0)'

EXEC(@query3)

Aber das was der Code machen soll, nämlich die letzte Spalte zur Vorletzten dazu addieren funktioniert nicht mehr, weil er eben die letzte und vorletzte Spalte nicht findet.
 
Hallo Chuky,

das tue ich normalerweise auch. Der Code sieht normalerweise wie folgt aus:

Code:
SET     @tabelle = '[DOM1\20-DIAS].[tmp3]'
SET     @ordinal = ( SELECT max(ORDINAL_POSITION) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle )
SET     @letzte_spalte = ( SELECT max(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle AND ORDINAL_POSITION = @ordinal )
SET     @vorletzte_spalte = ( SELECT distinct COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tabelle AND ORDINAL_POSITION = @ordinal - 1 )
SET        @query3 = 'UPDATE [' + @tabelle + '] SET tmp = isnull([' + @letzte_spalte + '],0) + isnull([' + @vorletzte_spalte + '],0)'

EXEC(@query3)

Aber das was der Code machen soll, nämlich die letzte Spalte zur Vorletzten dazu addieren funktioniert nicht mehr, weil er eben die letzte und vorletzte Spalte nicht findet.


Ich sehe im ersten SET @tabelle immer noch das Schema....Das muss da weg! Sonst bekommst du eben ein NULL zurück ;)
 
Ok und wie bekomme ich das weg? Muss gestehen habe mich mit der Thematik von Schemen noch nie auseinander gesetzt.

Ich würde darunter nun verstehen, dass ich versuche die Datei durch das System anlegen zulassen, anstelle es manuell zu erstellen, wodurch dann das [DOM1\20-DIAS] wegfallen würde. Richtig?
 
Werbung:
Zurück
Oben