SQL Server Express - SQL Befehl
Guten Morgen liebe Gemeinde,
nutze derzeit folgende Befehl, um eine Tabelle anzulegen und diese mit Daten aus einer Tabelle anzulegen:
Die .txt ist wie folgt aufgebaut:
Jetzt weiß ich nicht weiter, wie ich am besten den Befehl anpassen kann, dass er zu einem im...
...ersten Abschnitt prüft, ob die Tabelle TEST genau mit den angegeben Felder vorhanden ist, sonst sollen diese neu angelegt werden - falls neue Felder durch diesen Befehl hinzugefügt werden sollen...
...zweiten Abschnitt prüft, ob die Datensätze bereits vorhanden sind oder nicht - wenn diese nicht vorhanden sind, soll er diese einfügen...
nutze derzeit folgende Befehl, um eine Tabelle anzulegen und diese mit Daten aus einer Tabelle anzulegen:
IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='TEST')
CREATE TABLE TEST
(
ID INT,
Vorname VARCHAR(40),
Nachname VARCHAR(40)
)
GO
BULK INSERT TEST
FROM 'C:\ProgramData\TEST\test-1.txt' WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
GO
Die .txt ist wie folgt aufgebaut:
1;Max;Mustermann
2;Erika;Musterfrau
3;Hans;Mustermann
Jetzt weiß ich nicht weiter, wie ich am besten den Befehl anpassen kann, dass er zu einem im...
...ersten Abschnitt prüft, ob die Tabelle TEST genau mit den angegeben Felder vorhanden ist, sonst sollen diese neu angelegt werden - falls neue Felder durch diesen Befehl hinzugefügt werden sollen...
...zweiten Abschnitt prüft, ob die Datensätze bereits vorhanden sind oder nicht - wenn diese nicht vorhanden sind, soll er diese einfügen...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 523634
Url: https://administrator.de/forum/sql-server-express-sql-befehl-523634.html
Ausgedruckt am: 10.04.2025 um 23:04 Uhr
7 Kommentare
Neuester Kommentar
Moin,
Die Spalten kannst du mit einem Select abfragen:
und dann die nicht vorhandenen per ALTER TABLE hinzufügen.
im 2ten Abschnitt würde ich den Import in eine Temp-Tabelle machen und die mann mittels MERGE in die persistente Tabelle einfügen.
lg,
Slainte
Die Spalten kannst du mit einem Select abfragen:
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '{{Table Name}}'
AND COLUMN_NAME = '{{Column Name}}'
und dann die nicht vorhandenen per ALTER TABLE hinzufügen.
im 2ten Abschnitt würde ich den Import in eine Temp-Tabelle machen und die mann mittels MERGE in die persistente Tabelle einfügen.
lg,
Slainte
COLUMN_NAME kann nicht gleichzeitig 3 Werte haben, es kann also entweder INT, Vorname oder Nachname drin stehen aber nicht alles zur selben Zeit. Du wirst jede Spalte einzeln prüfen müssen und ggf. die Tabelle mit ALTER TABLE um die Spalte erweitern müssen die fehlt.
Ist das denn überhaupt sinnvoll? Ich meine meistens gibt es die Tabelle oder es gibt sie nicht. Was genau ist denn dein Ziel?
Ist das denn überhaupt sinnvoll? Ich meine meistens gibt es die Tabelle oder es gibt sie nicht. Was genau ist denn dein Ziel?
Mein Ziel ist es eigentlich, dass ich gerne einen Befehl haben möchte, der prüft, ob die richtigen Spalten hinterlegt sind und ich diese einfach über eine Anweisung erweitern kann, falls gewünscht.
Dazu bauchst du für jeden Spalte ein IF EXIST mit entsprechendem SELECT nach dem Schema aus meinem Post. Bei FALSE musst du dann die Tabelle mit ALTER TABLE ... ADD <spalte> einfügenDes Weiteren soll er bei jedem Import aus meiner .txt Datei nicht die doppelten Datensätze einfügen sondern prüfen, ob diese bereits vorhanden oder nicht. Wenn nicht vorhanden, darf er diese einfügen.
Auch hier: wie bereits gepostet. BULK INSERT in temporäre Tabelle, dann mit MERGE in die persistente einfügen.ich benötige hier Unterstützung - wie kann der Befehl aussehen?
CREATE TABLE #incoming ....
BULK INSERT #incoming ....
MERGE #incoming USING TEST ON ....
Näheres z.b. hier: http://www.sqlservertutorial.net/sql-server-basics/sql-server-merge/
DROP TABLE #incoming