miprant Geschrieben 16. August 2007 Autor Teilen Geschrieben 16. August 2007 habe grad einen Lösungsansatz bekommen: man sollte bereits in der SELECT Zeile die Zeilenumbrüche (\n oder \n\r) durch "" ersetzen. Sagt dir das was? Und wenn ja, wie sollte der in der Praxis ausschaun? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 16. August 2007 Teilen Geschrieben 16. August 2007 Also das Excel damit Probleme hat, kann ich mir gut vorstellen, da ja keinerlei Zeilentrenner gesetzt werde. Für Excel sieht es also dann so aus, als wenn viele Spalten nebeneinander stehen. Und bei 256 Spalten ist dann natürlich Schluss (Spalte IV). Aber Excel ist ja auch nicht deine Zielanwendung wenn ich das richtig verstanden habe... Wie liest denn die Gegenseite die Datei ein? Sie muss ja auch irgendetwas fest machen, dass die Zeile zuende ist? (bestimmte Anzahl der Felder?) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 16. August 2007 Teilen Geschrieben 16. August 2007 habe grad einen Lösungsansatz bekommen: man sollte bereits in der SELECT Zeile die Zeilenumbrüche (\n oder \n\r) durch "" ersetzen. Sagt dir das was? Und wenn ja, wie sollte der in der Praxis ausschaun? Du meinst in deinen Daten stehen schon Zeilenumbrüche drin? Hmm, lass mich mal kurz grübeln... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 16. August 2007 Autor Teilen Geschrieben 16. August 2007 nein, Excel ist nicht meine Zielanwendung. Die CSV-Daten sind für eine php-Schnittstelle auf unserem Webserver gedacht. Und für diese php-Schnittstelle darf pro Zeile nur ein Datensatz stehen. Derzeit ist es aber so, dass mitten in einem Datensatz ein Zeilenumbruch steht und die php-Schnittstelle dies dann als neuen Datensatz sieht. Die Folge ist klar: die Datensätz werden nicht importiert sondern ausgelassen. Wie liest denn die Gegenseite die Datei ein? Sie muss ja auch irgendetwas fest machen, dass die Zeile zuende ist? (bestimmte Anzahl der Felder?) ==> RICHTIG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 16. August 2007 Teilen Geschrieben 16. August 2007 Ok, dann hab ichs jetzt verstanden. Füge mal in die Zeilen des Selects wo ein varchar ausgelesen wird folgendes ein: REPLACE(REPLACE([I]<Spaltenname>[/I], char(10) , ' '), char(13),' ') AS [I]<gewünschter_Alias>[/I] ... also ... REPLACE(REPLACE(T0.ItemName, char(10) , ' '), char(13),' ') AS 'Artikelbeschreibung deu kurz' (Hab jetzt mal angenommen, dass in der Spalte Text steht. bcp dann natürlich ohne "-r", da hatten wir uns dann misstverstanden ) Edit: Die Replace-Funktion ersetzt einfach das Vorkommen von carriage return und linfeed durch blank. Vielleicht solltest du die Gegenseite fragen, ob du die nicht einfach maskierst indem du in den String gleich <br> o.ä. einfügst... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 16. August 2007 Autor Teilen Geschrieben 16. August 2007 Hab deinen Vorschlag grad versucht, aber folgende Fehlermeldung kommt: D:\sql>powergap_ohne_ftp.cmd 1> 2> 1> 2> 3> 4> 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 19> 20> 21> 22> 23> 24> 25> 26> 27> 28> 29> 30> 31> 32> 33> 34> 35> 36> 37> 38> 39> 40> 41> 42> 43> 44> 45> 46> 47> 48> 49> 50> 51> 52> Msg 8116, Level 16, Sta te 1, Server SAP, Procedure stprGetCSVData, Line 12 Argument data type ntext is invalid for argument 1 of replace function. Msg 8116, Level 16, State 1, Server SAP, Procedure stprGetCSVData, Line 12 Argument data type ntext is invalid for argument 1 of replace function. Msg 8116, Level 16, State 1, Server SAP, Procedure stprGetCSVData, Line 12 Argument data type ntext is invalid for argument 1 of replace function. 1> SQLState = 37000, NativeError = 2812 Error = [Microsoft][ODBC SQL Server Driver][sql Server]Could not find stored procedure 'hutstuebele..stprGetCSVData'. Sagt dir das was? Zur Sicherheit hab ich hier nochmal den Auszug aus der Prozedur: ... SELECT T0.ItemCode, T0.ItemName AS 'Artikelbeschreibung deu kurz', T3.FirmName AS 'Marke', T0.SuppCatNum AS 'Lief.art.nr.', T0.SalUnitMsr AS 'ME', T0.VatGourpSa AS 'SteuerID', T0.OnHand, REPLACE(REPLACE(T0.UserText, char(10) , ' '), char(13),' ') AS 'Artikelbeschreibung deu lang', T0.U_Descrip2 AS 'Artikelbeschreibung ital kurz', REPLACE(REPLACE(T0.U_Detail2, char(10) , ' '), char(13),' ') AS 'Artikelbeschreibung ita lang', T0.U_Descrip1 AS 'Aritkelbeschreibung eng kurz', REPLACE(REPLACE(T0.U_Detail1, char(10) , ' '), char(13),' ') AS 'Artikelbeschreibung eng lang', T0.U_webshop AS 'Aktiv', T0.U_webVfb2 AS 'Liefertage', T0.U_webVfb1 AS 'Sortierung', T1.Price AS 'VK-Preis', T0.U_EPA_spec AS 'Angebot', T0.U_mk1bez AS 'Groesse', T0.U_mk2bez AS 'Farbe', T0.U_farbeI AS 'Farbe ita', T0.U_farbeE AS 'Farbe eng', T1.Price AS 'VK-Preis2', T1.PriceList, T0.U_wgrpnr AS 'Gruppe', T0.U_EPAObjID AS 'UGR', T0.U_EPA_supr AS 'UGR_2', T0.U_EPA_crss AS 'Artikelzusätze', T0.QryGroup1 AS 'Damen', T0.QryGroup2 AS 'Herren', T0.QryGroup3 AS 'Kinder', T0.QryGroup4 AS 'Erwachsene', T0.U_EPA_prod AS 'Versandkostenfrei' FROM OITM T0 INNER JOIN ITM1 T1 ON T0.ItemCode = T1.ItemCode INNER JOIN OMRC T3 ON T0.FirmCode = T3.FirmCode WHERE T0.U_webshop ='Y' AND T1.PriceList =2 ... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 17. August 2007 Teilen Geschrieben 17. August 2007 Moin, Da hast du ja ein schönes Problemchen. Anscheinend sind deine Spalten TEXT oder NTEXT, daher kann die Replace-Funktion darauf nicht direkt arbeiten. Das hat der Compiler gemerkt und die Prozedur nicht angelegt, der Rest ist Folgefehler... Unter SQL2005 wäre die Umwandlung kein Problem, da es dort einen Datentyp namens nvarchar(max) gibt. Dieser steht dir auf deinem 2000er System leider nicht zur Verfügung. Bevor ich mir die Mühe geb und ein Script für ein Update auf eine temporäre Tabelle zu schreiben, würde es evtl auch reichen, die ersten 4000 Zeichen zu übertragen? Gruß, Honky Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 17. August 2007 Autor Teilen Geschrieben 17. August 2007 ...Problemchen ist gut... Was meinst du mit den ersten 4000 Zeichen? Insgesamt oder pro Feld? Weil pro Feld oder Zeile kommen nie soviele zusammen, von daher wären 4000 Zeichen mehr als ausreichend. Wenn du die ganze Datei meinst, dann sind da weit mehr als 4000 Zeichen, da alleine bereits jetzt ca. 3200 Zeilen da sind viele Grüße, Michael Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 17. August 2007 Teilen Geschrieben 17. August 2007 Nein, ich meinte natürlich pro Feld. Die Gesamtgrösse der Datei ist davon unberührt... Dann setz mal dies ein: REPLACE(REPLACE([B]CAST(<Spaltenname> AS nvarchar(4000))[/B], char(10) , ' '), char(13),' ') AS <gewünschter_Alias> Dies wandelt dein Result aus dem Textfeld, welches ja deutlich mehr als 4000 Zeichen enthalten kann, in den Datentyp nvarchar um. Da der nur 4000 Zeichen lang sein kann, wird der Rest einfach ohne Fehlermeldung abgeschnitten. TEXT bzw. NTEXT sollte man in der Tat nur verwenden, wenn es wirklich nicht anders geht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 17. August 2007 Autor Teilen Geschrieben 17. August 2007 habs versucht, kommt folgende Fehlermeldung: incorrect syntax near the keyword 'AS' Weiter oben hast geschrieben, dass es nvarchar nur unter sql2005 gibt - liegts daran? Ich hab ja nur sql 2000 zur Verfügung... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 17. August 2007 Teilen Geschrieben 17. August 2007 Dann check nochmal die Anzahl der öffnenden & schließenden Klammern. REPLACE(REPLACE(CAST(T0.UserText AS nvarchar(4000)), char(10) , ' '), char(13),' ') AS 'Artikelbeschreibung deu lang', Nein, nvarchar gibt es schon. Allerdings nur in der größenbegrenzten Art, unter SQL 2005 kann man mit der Angabe "max" wesentlich größere Strings verwalten... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 18. August 2007 Autor Teilen Geschrieben 18. August 2007 Buon giorno Honky! Oder wie man bei euch wohl sagt: Moin! Super Sache - der Code passt. Würde sagen, das Problem ist gelöst... wenn da nicht doch noch eine kleine Sache wäre... (muss wohl immer so sein...). Und zwar wird dieses .csv-file anscheinend nicht im Ascii Modus gespeichert, da die Schnittstelle auf der anderen Seite das file nur richtig einliest, wenn ich es vorher mit einem TextEditor geöffnet und manuell gespeichert habe... :confused: Hast du vielleicht noch eine Idee, ob man beim bcp noch was einstellen kann dass das file automatisch wie beschrieben richtig gespeichert wird? Danke für deine Mühe! lg Michael Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 22. August 2007 Teilen Geschrieben 22. August 2007 Moin ist korrekte Anrede Hm, das wiederspricht sich dann irgendwie doch mit deiner UTF-8 Angabe, wenn du nun ASCII haben möchtest oder? Ich glaube, dass das Problem schlichtweg darin liegt, dass deine Spalten, die Text enthalten unicode-varchar (nvarchar). Die müssten wir beim Export wohl auch nochmal umwandeln, damit sie korrekt in die Datei wandern. BCP sollte nämlich per se ASCII-Satz speichern... Ersetz mal bitte in deinen Textspalten innerhalb des Selects nvarchar(4000) durch varchar(8000) (bei normalen varchar können wir auch größere Textlängen zulassen...) Gruß, Honky Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Honkytonk Geschrieben 22. August 2007 Teilen Geschrieben 22. August 2007 Achja, kleiner Nachtrag: -C "UTF-8" solltest du dann aus dem BCP-Aufruf entfernen.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 22. August 2007 Autor Teilen Geschrieben 22. August 2007 Hallo! Das mit dem ASCII hab ich von der Gegenseite (php-Schnittstellen-Programmierer). Der meinte, dass die korrekte Umwandlung erst funktioniert, wenn er die CSV-Datei mit einem Texteditor öffnet und manuell speichert. Wenn ich das "UTF-8" weglasse, dann habe ich Probleme mit den Umlauten und Sonderzeichen. Diese Probleme habe ich aber nicht, wenn ich die CSV-Datei im Editor öffne und speichere... :confused: Ich werd aber jetzt mal deinen Vorschlag testen, vielleicht klappts ja... Der php-Programmierer kann mir übrigens (noch) nicht sagen, was das eigentliche Problem ist (welcher Fehler dahinter steckt...). Das macht's nicht leichter... vG Michael Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
miprant Geschrieben 22. August 2007 Autor Teilen Geschrieben 22. August 2007 Dein Vorschlag mit der Änderung von nvarchar auf varcher hat leider nicht den gewünschten Erfolg gebracht. Die Gegenseite meint, dass wir einen php-tauglichen Zeichensatz verwenden sollen. Mit reinem ASCII gibts aber keine Umlaute... Weiters meinen die, wir müssten das "Speichern in einem Texteditor" "simulieren". Keine Ahnung, wie wir das machen sollen. Frage: 1. hast du einen Vorschlag für anderen Zeichensatz als UTF-8 (der aber auch Umlaute enthält?) 2. was hältst du von diesem "simulieren"? Hast du eine Ahnung, wie wir das machen könnten? (ich weiss ja nicht mal, wie der Texteditor es macht, dass Umlaute zwar angzeigt aber nicht als solches gespeichert werden?!) Nachdem du hier eindeutig derjenige von uns beiden bist, der hier weiss was er tut, hoffe ich du hast eine Aw auf meine Fragen viele Grüße, Michael Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.