String zusammen setzen BULK INSERT

freshman

SQL-Guru
Beiträge
100
Hallo Gemeinde, mal wieder eine Frage:
Wenn ich die Spaltenbezeichnungen in der Antwort haben möchte, dann sieht die Abfrage ja so aus:

SELECT 'TSTNR1', 'FIRMA' ,
'BEZEI1-Komp', 'BEZEI2'
UNION ALL
SELECT TSTNR1, FIRMA,
[BEZEI1-Komp], BEZEI2
FROM StListTest2.dbo.ITest INNER JOIN StListTest2.dbo.ArtNr ON ITest.TSTNR1 = ArtNr.Artikelnummer

funkioniert ja auch

natürlich habe ich viel mehr Spalten, und muss mir dann für Nutzung BCP einen String bauen, damit nicht alles in einer Zeile steht. Das schaut dann so aus (mit viel weniger Spalten)..

DECLARE @cmdStr AS nvarchar (2000)
SET @cmdStr = 'bcp ' +
'"SELECT 'TSTNR1', 'FIRMA', ' +
''BEZEI1-Komp', 'BEZEI2' ' +
'UNION ALL ' +
'SELECT TSTNR1, FIRMA ' +
'[BEZEI1-Komp], BEZEI2 '
'FROM StListTest2.dbo.ITest INNER JOIN StListTest2.dbo.ArtNr ON ' +
ITest.TSTNR1 = ArtNr.Artikelnummer" ' +
'queryout C:\str2.csv -c -C{ACP} -T -t";" -r\n'
EXEC xp_cmdshell @cmdSTR

Zur Identifikation, es gibt keine Anführungsstriche (ausser vor SELECT und nach Artikelnummer), alles sonst ist '

Wo bau ich da den String falsch zusammen?

DANKE
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
Überall wo der Text im SQL Editor die Farbe wechselt und es nicht sollte.

Code:
DECLARE @cmdStr AS nvarchar (2000)
SET @cmdStr = 'bcp ' +
'"SELECT TSTNR1, FIRMA, ' +
'BEZEI1-Komp, BEZEI2 ' +
'UNION ALL ' +
'SELECT TSTNR1, FIRMA ' +
'BEZEI1-Komp, BEZEI2 ' +
'FROM StListTest2.dbo.ITest INNER JOIN StListTest2.dbo.ArtNr ON ' +
'ITest.TSTNR1 = ArtNr.Artikelnummer" ' +
'queryout C:\str2.csv -c -C{ACP} -T -t";" -r\n'
EXEC xp_cmdshell @cmdSTR

Also eigentlich überall falsch.
 

freshman

SQL-Guru
Beiträge
100
mmmmmmhhhh... aber Spaltenüberschriften müssen doch
'Spaltenename'
formatiert werden, oder?
Wenn ich das so mache, wie Du es schreibst, bekomme ich die Rückmeldung ""ungültiger Spaltenname!

?????????????
 

ukulele

Datenbank-Guru
Beiträge
4.582
Also ' unterbricht normalerweise jeden String. In sofern kannst du das nicht in einen String einbauen ausser du suchst dir die CHAR() Nummer raus und verkettest das. Aber eigentlich brauchst du das nicht bzw. das 'spalte' verhindert sogar das es eine Spaltenüberschrift gibt. Ansonsten geht auch:

spalte
"spalte"
[spalte]
tabelle.spalte
tabelle.[spalte]
[tabelle].[spalte]
"tabelle"."spalte"
etc.

Um einen Spaltennamen zu ändern kannst du spalte AS spaltenname machen.
 

freshman

SQL-Guru
Beiträge
100
Danke, aber nun hab ich es nicht ganz geschnallt... wie bekomme ich den Spaltennamen denn nun mit in meine csv Datei exportiert?
nerve ich?? :)
 

ukulele

Datenbank-Guru
Beiträge
4.582
Und jetzt versteh ich erst was dein Problem ist. Du brauchst ein Hochkomma im String, das geht per Doppel-Hochkomma ''. Abgesehn davon fehlt dir aber an anderer Stelle noch ein ' und ein +.

Code:
DECLARE @cmdStr AS nvarchar (2000)
SET @cmdStr = 'bcp ' +
'"SELECT ''TSTNR1'', ''FIRMA'', ' +
'''BEZEI1-Komp'', ''BEZEI2'' ' +
'UNION ALL ' +
'SELECT TSTNR1, FIRMA ' +
'[BEZEI1-Komp], BEZEI2 ' +
'FROM StListTest2.dbo.ITest INNER JOIN StListTest2.dbo.ArtNr ON ' +
'ITest.TSTNR1 = ArtNr.Artikelnummer" ' +
'queryout C:\str2.csv -c -C{ACP} -T -t";" -r\n'
EXEC xp_cmdshell @cmdSTR
 
Werbung:
Oben