bulk insert של מחרוזות

עוז 2002

New member
bulk insert של מחרוזות

אני מנסה לקרוא קובץ שטוח לתוך טבלה ב-sql server באמצעות הפקודה bcp או bulk insert. ה-fieldterminator הוא פסיק, ןולכן כאשר יש מחרוזות שמכילות פסיקים הקריאה משתבשת, למרות שהמחרוזת תחומה במרכאות כפולות. שורה שנקראת טוב:
1,2,"this is a string",4​
שורה שמשתבשת:
1,2,"this, is, a string",4​
כיצד ניתן לומר לשרת להתייחס לפסיקים בתוך מחרוזת כחלק מהמחרוזת? הערה: הקובץ נוצר ע"י אפליקציה אחרת, כך שבבקשה אל תציעו לי להחליף סימנים בקובץ. לא מעשי. תודה!!
 

גרי רשף

New member
אני מהמר שאין לזה פתרון פשוט

לא בדקתי לעומק, אבל Bulk Insert מבצע קריאה פשוטה בלי הרבה חוכמות מקובץ טקסט לטבלה. למשל- מה יקרה אם תקרא קובץ כתובות ויופיע בו פלוני שגר ברחוב הרמב"ם בעיר ת"א? איך המערכת אז תדע שהתווים התחומים בין המרכאות של שם הרחוב והמרכאות של שם העיר אינם מחרוזת והפסיקים גוברים על המרכאות? אם יש כל מיני התחכמויות- יש לטפל בהן באמצעות קוד לאחר קליטת הקובץ לתוך טבלה בעלת שדה אחד (זה מה שאני הייתי עושה). מכיוון שאינני מומחה בעל שם עולמי- אם למישהו ידוע על פתרון מובנה לבעייה- אשמח להתעדכן.
 

עוז 2002

New member
תודה על התגובה

תודה על התגובה גרי. סתם לידיעת הקוראים access קורא את הקובץ נכון בלי בעיה. SQL Server משום מה מתעלם מהמרכאות כסימנים תוחמי מחרוזת.
 

Ice Age

New member
פשוט מאוד - תגדיר delimiter אחר

למשל pipe (|) או אפילו char(0) למיטיבי לכת.
 

עוז 2002

New member
אי אפשר

delimiter אחר בקובץ המקור? אי אפשר, הקובץ נתון. בעיה נוספת היא שהשרת מכניס את הגרשיים כחלק מהנתונים ולא שומר רק את המחרוזת.
 

Ice Age

New member
אז תשתמש ב-DTS כדי לטעון

הוא מאפשר להגדיר שהטקסט יהיה עם גרשיים אם אני זוכר נכון.
 

as71

New member
גם dts יפול

הייתי מכניס לתוך שדה אחד את כל השורה ואז חותך string string לשדה נפרד. ומוחק את ה string מהשורה substring(var1, CHARINDEX('"',var1), CHARINDEX('"',var1,CHARINDEX('"',var1))-CHARINDEX('"',var1)) את זה מכניס לשדה נפרד ואת זה חותך מהשורה המקורית (עם replace). רץ כמספר ה- string בשורה.
 
למעלה