Fehler in bcp

freshman

Datenbank-Guru
Beiträge
100
Hall Gemeinde,
hab da ne Abfrage, aber die funktioniert nicht, sehe den Fehler aber nicht

DECLARE @cmdStr AS nvarchar(1000)
SET @cmdStr = 'bcp ' +
'"SELECT * FROM ArtNr ' +
'queryout ' +
'"c:\test.txt" ' +
'-w -t"\t" -T -S ;'
EXEC xp_cmdshell @cmdSTR

Vielleicht sieht einer von Euch den Fehler?

DANKE
freshman
 
Werbung:

freshman

Datenbank-Guru
Beiträge
100
Hab die Abfrage umgebaut, nun hab ich ein anderes Problem:

xp_cmdshell
'bcp "SELECT DocNum, DocDate, DocType, DocStatus,' +
'Printed, CardCode, CardName, Address,' +
'VATSum, DocCur, DocTotal, DiscSum, DiscPrcnt' +
'FROM GTS.db.OPCH" queryout C:\test.txt -c -C{ACP} -T -t";" -r\n '

Wenn ich diese Abfrage in eine Zeile schreibe, dann funktioniert das alles problemlos... aber wenn ich es so schreibe wie hier, dann bekomme ich den Fehler: "Incorrect syntax near '+'."

Ich seh den Fehler nicht!!!????

freshman
 

freshman

Datenbank-Guru
Beiträge
100
nein, warum?

xp_cmdshell 'bcp "select TSTNR1, Firma, BEZEI2 from StListTest2.dbo.ITest" queryout C:\test.txt -c -T -t";" -r\n '

funktioniert Fehlerfrei!
 

ukulele

Datenbank-Guru
Beiträge
4.409
DiscPrcnt oder DiscPrint?
Funktioniert denn:
'bcp "SELECT DocNum, DocDate, DocType, DocStatus, Printed, CardCode, CardName, Address, VATSum, DocCur, DocTotal, DiscSum, DiscPrcnt FROM GTS.db.OPCH" queryout C:\test.txt -c -C{ACP} -T -t";" -r\n ' ohne die + Verkettung?
 

freshman

Datenbank-Guru
Beiträge
100
xp_cmdshell
'bcp "select DocNum, DocDate, DocType, DocStatus, Printed, CardCode, CardName, Address, VATSum, DocCur, DocTotal, DiscSum, DiscPrcnt from GTS.db:confused:PCH" queryout C:\test.txt -c -C{ACP} -T -t";" -r\n '

in eine Zeile geschrieben bringt mir das gewünschte Ergebnis... also muss ein Fehler in der Verkettung sein, aber ich weiss einfach nicht wo..
klar, man kann alles in eine Zeile schreiben.. aber dann wird es ja auch unübersichtlich!
 

ukulele

Datenbank-Guru
Beiträge
4.409
Ich kenne das von RAISERROR(), da lassen sich auch keine Texte im Aufruf verketten, nur mit vorherige Variable. Also z.B.

DECLARE @asdf VARCHAR(255) = 'Hallo Welt'
RAISERROR(@asdf,16,1)
geht
RAISERROR( 'Hallo Welt',16,1)
geht
RAISERROR( 'Hallo ' + 'Welt',16,1)
geht nicht
 
Werbung:

freshman

Datenbank-Guru
Beiträge
100
DANKE, das war der entscheidende Hinweis.. komischerweise klappt es nachdem man eine Variable deklariert hat.
Gerne stelle ich das nun zu Verfügung... kann man ja mal gebrauchen.. EVTL :)

DECLARE @cmdStr AS nvarchar (2000)
SET @cmdStr = 'bcp ' +
'"SELECT * 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

und hier noch die Parameter für bcp

-c = Führt den Vorgang mithilfe eines Zeichendatentyps aus
-C{ACP} = Codepage (ACP = ANSI/Microsoft Windows) ()braucht man bei Umlauten usw)
-T = Gibt an, dass das Hilfsprogramm bcp die Verbindung mit SQL Server mithilfe integrierter Sicherheit über eine vertrauenswürdige Verbindung herstellt
-t";" = Gibt das Feldabschlusszeichen an, hier ;.
-r\n = (Neue-Zeile-Zeichen) als Zeilenabschlusszeichen
 
Oben