ALTER TABLE: was mach ich falsch?

IchHH

Datenbank-Guru
Beiträge
284
Hallo,

ich habe folgenden Code und weis nicht was ich falsch mache:

Code:
DECLARE @column VARCHAR(100)
SET @column = (Select Case When DateName(dw
,    GetDate()) = 'Montag' Then 'Saldo am ' + Convert([varchar](100),DateAdd(day
,    -3
,    GetDate()),104) Else 'Saldo am ' + Convert([varchar](100),DateAdd(day
,    0
,    GetDate()),104) End
)
EXEC('ALTER TABLE S_92620 ADD ' + @column)

Vielleicht mögt ihr mir einmal weiterhelfen.

Danke
 
Werbung:
Hallo drdimitri,

ich bin mir ganz sicher. Ich habe vor zu den vorhanden Spalten eine neue zuzufügen und nicht eine zu verändern. Im zweiten Schritt wollte ich dann die Daten zu der neuen Spalte hinzufügen.
 
Ja, aber auch wenn ich in TSQL nicht so bewandert bin, scheint es nicht so zu sein, als ob die Variable column den syntaktisch korrekte Wert beinhaltet.
Da ist vermutlich der Wert drinnen, der in die neu angelegte Spalte im nächsten Schritt rein soll.

Daher die Frage ob hier ALTER und UPDATE vertauscht wurden.
 
Ja, sehe ich auch so. Ein dynamisch erzeugter Spaltenname, der Leerzeichen enthält, dazu wurde dann vergessen, den Spaltentyp anzugeben. Alles in allem eine schöne Demo, was man nicht machen sollte.
 
Euch verstehe ich nicht. Ich habe mir den Code angeschaut. An einen Varchar(20) der evtl. im Code fehlt liegt es nicht und bevor ich gleichzeitig auch noch Daten mit in die Spalte laufen lasse wollte ich erst einmal versuchen eine Spaltenüberschrift in eine bestehende Tabelle zu bekommen.

Hier noch einmal der Code mit Definition:

Code:
DECLARE @column VARCHAR(100)
SET @column = (Select Case When DateName(dw
,    GetDate()) = 'Montag' Then 'Saldo am ' + Convert([varchar](100),DateAdd(day
,    -3
,    GetDate()),104) Else 'Saldo am ' + Convert([varchar](100),DateAdd(day
,    0
,    GetDate()),104) End
)
EXEC('ALTER TABLE S_92620 ADD ' + @column + 'varchar(20)')

Die Updatefunktion versuche ich nicht zu beschreiben, ich will ja keine bestehende Spalte umbenennen sondern eine neue Spalte hinzufügen.
 
Der String @column enthält die Anweisung das wenn heute Montag ist das aktuelle Datum minus 3 Tage genommen werden soll und wenn es nicht zutrifft dann nur der aktuelle Tag minus 1 Tag. Das ganze wurde dann noch mit "Saldo am" angereichert so das heute also in @column stehen müsste "Saldo am 17.05.2017".

Wo fehlt das Leerzeichen den? Ich sehe es nicht.
 
Das leerzeichen fehlt zwischen dem Datum und dem Datentyp. Und da Dein Spaltenname weitere Leerzeichen enthält, ist das ein einiger syntaktischer GAU. Dein ganzen Konzept ist übrigens ein GAU, aber das ist ein anderes Thema.
 
Würdet Ihr mir mal aus der Patsche helfen? Ich bin nur ein Hobby Programmierer, habe es weder gelernt noch würde ich mich ansatzweise als gut bezeichnen. Eben ein Rookie. Wie müsste der Code den richtig aussehen um das zu erreichen was ich vorhabe?

Wenn ihr wüsstet das ich sonst noch so vorhabe und teilweise schon fertig habe dann würdet ihr wahrscheinlich die Hände über den Kopf zusammen stecken. Aber ich weiß mir eben nicht anders zu helfen.

Das Leerzeichen hat übrigens nicht geholfen. Er bleibt noch immer mit der Fehlermeldung "Falscher Syntax in der Nähe von '17.05'." hängen.
 
*seufz*

Code:
test=*# create table foo (id int primary key);
CREATE TABLE
test=*# alter table foo add column "das ist meine neue coole spalte vom 18. Mai" text;
ALTER TABLE
test=*# \d foo
  Tabelle »public.foo«
  Spalte  |  Typ  | Attribute
---------------------------------------------+---------+-----------
 id  | integer | not null
 das ist meine neue coole spalte vom 18. Mai | text  |
Indexe:
  "foo_pkey" PRIMARY KEY, btree (id)

test=*#

Noch mal zum langsamen mitlesen: Du hast einen konzeptionellen Fehler.
 
Werbung:
Worin soll der konzeptionelle Fehler den bestehen?
Ich habe eine Tabelle angelegt. Diese Beinhaltet aktuell nur zwei Spalten.

Kontenart Saldo vom 16.05.2017

Die Spalte Kontenart setzt sich aus 44 Zeilen zusammen und die Saldo-Spalte eben auch.

Nun wollte ich eine weitere Spalte hinzufügen mit den Wert "Saldo vom 17.05.2017" mit Werten von Gestern die dann aufsummiert werden mit den Werten vom Vortag (16.05.2017). Am morgigen Tag ist es dann also der 17.05.2017+18.05.2017 den ich aufsummiere und als Spalte darstellen lasse.

Die Werte wollte ich in einen zweiten Schritt nach einfügen der Spalte vornehmen.
 
Zurück
Oben