Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

In ein Neues Feld gleichzeitig Daten reinschreiben mit PHP in MSSQL

Frage Entwicklung

Mitglied: helmuthelmut2000

helmuthelmut2000 (Level 2) - Jetzt verbinden

01.11.2006, aktualisiert 02.11.2006, 4556 Aufrufe, 12 Kommentare

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
Mitglied: wakko
01.11.2006 um 14:20 Uhr
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...

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: n.o.b.o.d.y
01.11.2006 um 14:23 Uhr
Hallo,

SQL läßt es nicht zu, dass Du eine Tabelle erweiterst und gleichzeitig das Feld füllst. Das mußt Du immer mit zwei Statments machen.
DDL und DML können nicht gemischt werden.

Ralf
Bitte warten ..
Mitglied: Biber
01.11.2006 um 14:29 Uhr
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
Bitte warten ..
Mitglied: helmuthelmut2000
01.11.2006 um 20:23 Uhr
Hallo,

Ja,
Ich habe das so versucht:

ALTER TABLE Verlauf ADD ".$_POST['Artikelnummer']." nchar(11)";

Wenn ich da im Formular Artikelnummer test110 eingebe dann legt es eine Spalte mit
test110 an.
Wenn ich dann:

ALTER TABLE Verlauf ADD ".$_POST['Artikelnummer']." nchar(11) WattDuWillst";

eingebe, dann bekomme ich da die Fehlermeldung:

Warning: mssql_query() [function.mssql-query]: message: Zeile 5: Falsche Syntax in der Nähe von 'WattDuWillst'. (severity 15) in C:\Programme\Apache Group\Apache2on line 23

Ich kann das so "WattDuWillst"; oder so WattDuWillst reinschreiben.

Was mach ich da blos wieder falsch.
Das hängt doch bestimmt wieder mit dem " oder ' zusammen?

Kannst du mir das mal erklären?

Danke.

Gruß
Helmut
Bitte warten ..
Mitglied: Biber
01.11.2006 um 21:35 Uhr
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?
Bitte warten ..
Mitglied: helmuthelmut2000
01.11.2006 um 22:54 Uhr
Hallo Biber,

Ja das ist so wie du das schreibst.
Ich habe in einer anderen Tabelle den Preis, Name usw. angelegt.
Jetzt möchte ich einen Verlauf basteln wo es mir schreibt wann wieviel
von einem Artikel verkauft oder wieder gekauft wird.
Da habe ich das so gemacht das beim Anlegen des Artikels auch noch in der Tabelle
Verlauf eine Spalte mir Artikelnummer(das bietet sich an weil es die Artikelnummer
immer nur einmal gibt)angelegt wird, und wird jetzt immer die Stückzahl eingetragen
wieviel gekauft und dann verkauft wurde. Jetzt wäre das halt schön wenn beim
anlegen das Artikels auch gleich die Startstückzahl mit eingetragen würde.
Aber wenn sowas nicht geht dann muß ich halt bei der eingabe 2 Seiten machen.

Gruß
Helmut
Bitte warten ..
Mitglied: Biber
01.11.2006 um 23:18 Uhr
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
Bitte warten ..
Mitglied: helmuthelmut2000
02.11.2006 um 13:58 Uhr
Hallo,

Nein das mein ich nicht so.

Ein Artikel mit einer Artikelnummer wird nur einmal angelegt, (evt auch mit einer Stückzahl).
Dann wird eine Stückzahl dazuaddiert oder abgezogen (bei kaufen dazu und beim verkaufen weg.)
Das mach ich dann über ändern.

Gruß
Helmut
Bitte warten ..
Mitglied: n.o.b.o.d.y
02.11.2006 um 14:12 Uhr
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
Bitte warten ..
Mitglied: helmuthelmut2000
02.11.2006 um 15:46 Uhr
Hallo,

Ja ich hätte das so gemacht:

1.Tabelle

Art.Nr|Bezeichnung|Bestand
4711 |Becksbier |100
4712 |Weizenbi.| 200

...

2.Tabelle

4711 | 4712 | .....

100 | 200 | .....


Den Spaltenname möchte ich gleich als Art.Nr. nehmen.

Gruß
Helmut
Bitte warten ..
Mitglied: Biber
02.11.2006 um 19:42 Uhr
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 beschriebenen Unsinn Lösungsweg mit "NOT NULL WITH DEFAULT 100" beim ALTER-Statement nehmen.

Grüße
Biber
Bitte warten ..
Mitglied: helmuthelmut2000
02.11.2006 um 22:05 Uhr
Hallo,

Also der schreibt das nicht,
aber das mach ich jetzt auf zwei seiten.
Zuerst lege ich die Spalte an und dann mach ich mit
eine zweite Seite wo ich dann den Wert reinschreibe.
Da habt ihr Recht.
Aber vielleicht wisst ihr mir da eine Lösung mit den Zahlen die ich
als Spalte benennen will.
Meine Artikelnummern heisen alle z.B. 778-3423 und 778-3424 usw.
Das macht die SQL db aber nicht.
Da müßte ich immer [778-3423] schreiben.
Wie löst man das am besten damit man [] nicht schreiben will ???

Danke.

Gruß
Helmut
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
PHP
PHP Daten "Streamen" (3)

Frage von Roadrunner777 zum Thema PHP ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...