In ein Neues Feld gleichzeitig Daten reinschreiben mit PHP in MSSQL
Hallo,
Ich hab da mal ne Frage womit ich mich schon länger Beschäftige.
In meiner MSSQL DB Erstelle ich ein Neues Feld mit dem befehl:
$sql="ALTER TABLE Verlauf ADD ".$_POST['Artikelnummer']." nchar(11)";
Gleichzeitig möchte ich auch Daten reinschreiben. (z.B. mit INSERT INTO).
Gibt es da überhaupt eine Möglichkeit gleichzeitig ein Feld mit Daten zu erstellen?
Wenn da jemand was wüsste wäre ich sehr dankbar.
Danke.
Gruß
Helmut
Ich hab da mal ne Frage womit ich mich schon länger Beschäftige.
In meiner MSSQL DB Erstelle ich ein Neues Feld mit dem befehl:
$sql="ALTER TABLE Verlauf ADD ".$_POST['Artikelnummer']." nchar(11)";
Gleichzeitig möchte ich auch Daten reinschreiben. (z.B. mit INSERT INTO).
Gibt es da überhaupt eine Möglichkeit gleichzeitig ein Feld mit Daten zu erstellen?
Wenn da jemand was wüsste wäre ich sehr dankbar.
Danke.
Gruß
Helmut
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 43496
Url: https://administrator.de/forum/in-ein-neues-feld-gleichzeitig-daten-reinschreiben-mit-php-in-mssql-43496.html
Ausgedruckt am: 06.04.2025 um 22:04 Uhr
12 Kommentare
Neuester Kommentar
Sieht so aus, als ob da was beim Datenbankentwurf schief gegangen ist.
Kann dir da nur mal eine Normalisierung ans Herz legen, da du so ja die Tabelle immer "breiter" werden läßt.
Warum soll eine Spalte mit einer geposteten Artikelnummer erstellt werden? Wäre da nicht eine Spalte "Artikelnummer" sinnvoller, die die entsprechende Artikelnummer für jeden Datensatz enthält?
Ansonsten müsstest du das Problem in deinem Fall mal genauer erläutern...
MfG
Kann dir da nur mal eine Normalisierung ans Herz legen, da du so ja die Tabelle immer "breiter" werden läßt.
Warum soll eine Spalte mit einer geposteten Artikelnummer erstellt werden? Wäre da nicht eine Spalte "Artikelnummer" sinnvoller, die die entsprechende Artikelnummer für jeden Datensatz enthält?
Ansonsten müsstest du das Problem in deinem Fall mal genauer erläutern...
MfG
SQL läßt es nicht zu, dass Du eine Tabelle erweiterst und gleichzeitig das Feld füllst.
..es sei denn so:ALTER TABLE whatever ADD newfield char(12) not null with default "WattDuWillst".
Dann bekämen alle Sätze in der neu angelegten Spalte den Wert "WattDuWillst".Aber ich denke auch, hier liegt ein Missverständnis vor wie im ersten Kommentar beschrieben...
Es geht doch hoffentlich nur um einen neuen Datensatz, nicht um ein neues Feld.
Gruß
Biber
Moin Helmut,
also, ich hatte vorhin offensichtlich wieder vergessen, <Ironie>-Tags oder Smilies mit einzustreuen. Sorry.
Also, grundsätzlich kann ich beim Anlegen einer neuen SPALTE in einer Datenbank auch mit angeben, dass diese SPALTE einen Defaultwert haben soll.
Das gilt aber für alle bereits vorhandenen Datensätze in der Tabelle - also würde dann bei bei Dir in 57 Millionen Datensätzen im der neuen Spalte "4711" (wenn das die neue Artikelnummer ist), der Wert "WattDuWillst" stehen.
Ich glaube nicht, dass das wirklich Dein Wunsch ist.
Wenn doch - die grundsätzliche SQL-Syntax dafür lautet
ALTER TABLE ADD neuesTabellenfeld feldtypUndggfLänge [NOT NULL] [WITH DEFAULT defaultwert]
Mit dieser Syntax würde es eher gehen ...allerdings nur, wenn das Feld wie von mir oben beschrieben ist, CHAR(12) ist.
Weil -"WattDuWillst" hat nu mal 12 Zeichen und nicht 11.
[wobei das die SQL-Syntax ist, die ich von anderen DBMSen kenne, hab es nicht mit mySQL getestet]
Aber nun zum anderen überlesenen Teil meines Postings:
Es ist höchst ungewöhnlich, dass Du für jeden neuen Artikel eine neue Spalte in einer Tabelle anlegen musst.
Es sei denn, Du bastelst Dir gerade eine Tabellenstruktur für dynamische Auswertungen a la Pivot zusammen.
Bist Du sicher, dass Du für diese eingegebene Artikelnummer eine neue Tabellenspalte brauchst und nicht einen neuen Satz in einer Tabelle?
Eine neue Spalte mit dem Feldnamen "4711" würde doch nur dann Sinn machen, wenn Du schon irgendwo anders weitere Attribute (Artikelname, Artikelpreis,....) in Tabellen hinterlegt hast und außerdem für alle Datensätze in der eben geänderten Tabelle einen sinnvollen Wert für "4711" parat hättest.
Gruß
Biber
P.S. Und ansonsten war die Antwort von n.o.b.o.d.y. die richtige und erschöpfende Lösung.
Was spricht denn dagegen, die Tabelle mit einem ALTER TABLE zu ändern und danach ein "UPDATE TABLE ..SET neuesfeld ="WattDuWillst" zu machen?
also, ich hatte vorhin offensichtlich wieder vergessen, <Ironie>-Tags oder Smilies mit einzustreuen. Sorry.
Also, grundsätzlich kann ich beim Anlegen einer neuen SPALTE in einer Datenbank auch mit angeben, dass diese SPALTE einen Defaultwert haben soll.
Das gilt aber für alle bereits vorhandenen Datensätze in der Tabelle - also würde dann bei bei Dir in 57 Millionen Datensätzen im der neuen Spalte "4711" (wenn das die neue Artikelnummer ist), der Wert "WattDuWillst" stehen.
Ich glaube nicht, dass das wirklich Dein Wunsch ist.
Wenn doch - die grundsätzliche SQL-Syntax dafür lautet
ALTER TABLE ADD neuesTabellenfeld feldtypUndggfLänge [NOT NULL] [WITH DEFAULT defaultwert]
Mit dieser Syntax würde es eher gehen ...allerdings nur, wenn das Feld wie von mir oben beschrieben ist, CHAR(12) ist.
Weil -"WattDuWillst" hat nu mal 12 Zeichen und nicht 11.
[wobei das die SQL-Syntax ist, die ich von anderen DBMSen kenne, hab es nicht mit mySQL getestet]
Aber nun zum anderen überlesenen Teil meines Postings:
Es ist höchst ungewöhnlich, dass Du für jeden neuen Artikel eine neue Spalte in einer Tabelle anlegen musst.
Es sei denn, Du bastelst Dir gerade eine Tabellenstruktur für dynamische Auswertungen a la Pivot zusammen.
Bist Du sicher, dass Du für diese eingegebene Artikelnummer eine neue Tabellenspalte brauchst und nicht einen neuen Satz in einer Tabelle?
Eine neue Spalte mit dem Feldnamen "4711" würde doch nur dann Sinn machen, wenn Du schon irgendwo anders weitere Attribute (Artikelname, Artikelpreis,....) in Tabellen hinterlegt hast und außerdem für alle Datensätze in der eben geänderten Tabelle einen sinnvollen Wert für "4711" parat hättest.
Gruß
Biber
P.S. Und ansonsten war die Antwort von n.o.b.o.d.y. die richtige und erschöpfende Lösung.
Was spricht denn dagegen, die Tabelle mit einem ALTER TABLE zu ändern und danach ein "UPDATE TABLE ..SET neuesfeld ="WattDuWillst" zu machen?
Wenn das so ist wie Du schreibst, Helmut,
dann wäre es erst recht Unsinn und überflüssig, beim Anlegen der Spalte gleichzeitig einen Default-Wert mitzugeben.
Wenn der Artikel am 1.November dazukommt und 100 Stück gekauft wurden, die Tabelle "Verlauf" aber seit April 2005 existiert.... dann willst Du doch nicht die Angabe "100" in allen Datensätzen stehen haben.
Also mach es wie von n.o.b.o.d.y. skizziert,
- erst das "ALTER TABLE verlauf ADD ".$_POST['Artikelnummer']." nchar(11);"
- dann das "Insert into verlauf ( Pflichtfelder..., ".$_POST['Artikelnummer']." )
values ( pflichtfelderwerte,..., 100)"
Gruß
Biber
dann wäre es erst recht Unsinn und überflüssig, beim Anlegen der Spalte gleichzeitig einen Default-Wert mitzugeben.
Wenn der Artikel am 1.November dazukommt und 100 Stück gekauft wurden, die Tabelle "Verlauf" aber seit April 2005 existiert.... dann willst Du doch nicht die Angabe "100" in allen Datensätzen stehen haben.
Also mach es wie von n.o.b.o.d.y. skizziert,
- erst das "ALTER TABLE verlauf ADD ".$_POST['Artikelnummer']." nchar(11);"
- dann das "Insert into verlauf ( Pflichtfelder..., ".$_POST['Artikelnummer']." )
values ( pflichtfelderwerte,..., 100)"
Gruß
Biber
Hallo,
damit wir das hier alle richtig verstehen:
Du möchtest einmal eine Tabelle mit den Artikelstammdaten haben:
Art.Nr|Bezeichnung|Bestand
4711 |Becksbier |100
...
So etwa?
Dann möchtest Du eine Tabelle mit Historiedaten haben:
Art.Nr|Datum|vorhandene Menge
4711 |1.1.06|55
4711 |2.1.06|100000
Oder wie hast Du dir das vorgestellt?
Ralf
damit wir das hier alle richtig verstehen:
Du möchtest einmal eine Tabelle mit den Artikelstammdaten haben:
Art.Nr|Bezeichnung|Bestand
4711 |Becksbier |100
...
So etwa?
Dann möchtest Du eine Tabelle mit Historiedaten haben:
Art.Nr|Datum|vorhandene Menge
4711 |1.1.06|55
4711 |2.1.06|100000
Oder wie hast Du dir das vorgestellt?
Ralf
Also, diesen Plan mit der 1-Satz-Verlauf (oder eher Bestand-Tabelle) halte ich nicht für zukunftsträchtig.
Aber da das ja nicht die Frage war, musst Du dann das zweite gepostete Statemet ändern von INSERT auf UPDATE.
- erst das ALTER TABLE:
... ALTER TABLE verlauf ADD ".$_POST['Artikelnummer']." nchar(11);
- dann das UPDATE
Update verlauf set ".$_POST['Artikelnummer']." = 100;
-bzw- wenn diese Tabelle wirklich nur den einen Satz mit "Bestand hier und heute" hat, dann kannst Du tatsächlich den oben beschriebenenUnsinn Lösungsweg mit "NOT NULL WITH DEFAULT 100" beim ALTER-Statement nehmen.
Grüße
Biber
Aber da das ja nicht die Frage war, musst Du dann das zweite gepostete Statemet ändern von INSERT auf UPDATE.
- erst das ALTER TABLE:
... ALTER TABLE verlauf ADD ".$_POST['Artikelnummer']." nchar(11);
- dann das UPDATE
Update verlauf set ".$_POST['Artikelnummer']." = 100;
-bzw- wenn diese Tabelle wirklich nur den einen Satz mit "Bestand hier und heute" hat, dann kannst Du tatsächlich den oben beschriebenen
Grüße
Biber