קריאת קבצי טקסט בעזרת OpenRowset ו-XML

יום רביעי, ספטמבר 18, 2013

כתבתי בעבר על קריאת קבצי טקסט בכל מיני דרכים, והנה עוד אחת.. ניצור קובץ טקסט כדלקמן ונשמור אותו במחיצה C:\Tmp בשם MyFile.txt: שורה ראשונה segunda línea third row טורא בתרא רצוי לשמור בתור unicode כדי שמה שכתוב בספרדית בשורה השניה לא ישתבש. והשליפה: Select LTrim(RS2xml.Loc.query('.').value('(/n/@t)','NVarchar(Max)')) Linea From (Select Cast('<root><n t="'+Replace(BulkColumn,Char(13),'" /><n t="')+'" /></root>' As XML) Sxml From OpenRowset(Bulk...
אין תגובות

שליפת שמות כל הטבלאות בשרת

יום שישי, אפריל 15, 2011

המשימה כשלעצמה לא אמורה להיות מסובכת במיוחד- יוצרים פרוצדורה שעוברת בלולאה על כל הדטבייסים, שולפת את שמות הטבלאות לתוך טבלה זמנית, ולסיום מבצעת Select על הטבלה; אלא שאני משתדל לתת פתרונות שאינם כוללים יצירה של אובייקטים (מה שמצריך הרשאות מיוחדות והתרפסות בפני ה-DBA), ושהשליפה נראית כשליפה- פקודת Select שאפשר לפלטר, למיין, לבצע Join וכו'; ומאז שנגלו לי נפלאות ה-OpenRowSet מתברר שניתן להצפין בתוכו קטעי קוד ולקבל את מבוקשי. נתחיל בקטעי הקוד, ובהמשך נפעיל את ה-OpenRowSet:...
אין תגובות

חסכו ואמצו (2)

יום חמישי, אפריל 7, 2011

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

לכידת פלט פרוצדורה (2)

יום שבת, מרץ 12, 2011

בפוסט קודם הראתי כיצד ללכוד פלט פרוצדורה, כשהדגש היה על הפלט המופנה ללשונית ה-Messages (בתחתית צילום המסך): את הפלט המופנה ללשונית ה-Results ניתן להפנות לטבלה ולשלוף ממנה לאחר מכן. למשל: Create Table #SP_Who(spid Int, ecid Int, status Varchar(20), ...
אין תגובות

שירשור ערכים מטבלה

יום שני, אוגוסט 2, 2010

נפתח בחידה בעל פה: מה יהיה הפלט של הסקריפט הקצר הבא? Declare @S Varchar(Max); Select @S=name From sys.sysobjects; Print @S; נו טוב- הרוב בוודאי ממשיכים הלאה לראות מה התשובה בלי לנסות לחשוב, ומבין מעט הצדיקים שעוצרים לרגע ומנסים את כוחם – חלק אולי כבר יודעים את התשובה, חלק מבינים שיש כאן מלכודת ולא שאלת תם, ואולי יש צדיק אחד שנופל בפח הלא מוצלח.. לעצם העניין – אתם אמורים לטעות ולטעון שהתוכנית תיכשל מכיוון שלתוך משתנה ניתן להכניס ערך אחד ולא עמודה שלמה, עובדה שפקודה כמו (Select @S=(Select name From sys.sysobjects נכשלת מכיוון ששאילתת...

הפרוצדורה xp_cmdshell

יום חמישי, יולי 1, 2010

הפרוצדורה הנ"ל שהיא Extended Stored Procedure מאפשרת להריץ Command Lines שהשרת תומך בהם, מתוך SQL Server. קודם כל הכוונה לפקודות הוותיקות המוכרות לנו מימי DOS העליזים- Copy, Dir, Type, Del, MD, RD וכו', ובהמשך לכך Command Lines של מערכות שונות שהותקנו על השרת: SQL Server עצמו עם פקודות כמו BCP או SQLCMD, ועוד. החל מגרסת 2005 הפרוצדורה מנוטרלת כברירת מחדל בשל בעיות האבטחה הכרוכות בהפעלתה: הפקודה מופעלת על ידי השרת עם ההרשאות של ה-Agent בהתייחס ל-SQL Server ולשרת הפיזי, ומכיוון שיש לו בדרך כלל הרשאות גבוהות שאין לכל משתמש או מתכנת – ניתן להריץ בעזרת xp_cmdshell פקודות שונות מול ה-File System של...