שאלה על הצגת XML בשאילתת SQL

אבי רוד

New member
שאלה על הצגת XML בשאילתת SQL

שלום לכולם, האם יש דרך להפיק משדה שנשמר בפורמט XML נתונים? כלומר, יש שדה בטבלה בו מופיעים נתונים רבים שאני צריך - בפורמט XML. חלק מהנתונים חשובים לי ואני צריך אותם בפורמט SQL רגיל כדי שאני יוכל להשתמש בהם בשאילתות שלי. מישהו יכול לעזור?
 

אבי רוד

New member
תודה על הקישור.

בפוסט שהבאת רואים גם את יצירת שדה ה-XML ורק לאחר מכן את פירוקו לתת שדות. מה עושים במקרה בו שדה ה-XML כבר קיים ורוצים לפרקו לתתי שדות?
 

גרי רשף

New member
עבר הרבה זמן מאז שכתבתי אותו..

באופן כללי- לא ניתן לשלוף מ-XML באופן עיוור כמו ששולפים מטבלה Select * From. צריך לפענח קודם את המבנה שלו. בפוסט יש דוגמה כיצד לשלוף את שמות העמודות (קודם לכן צריך למצוא את שם הטבלה - Products - אבל כך זה גם עם טבלאות רגילות), ואז לשלוף את הנתונים עצמם..
 

pitoach

New member
הבהרה: ניתן לשלוף את הנתונים בעזרת שליפה

רגילה מהצורה select * from Tbl כך למשל אם תריץ את השאילתה הבאה על הטבלה שמופיעה במדריך של גרי תקבל תוצאה. select * from T_Products GO התוצאה תכיל את תוכן ה XML עצמו. אם תשים לב התוצאה ניראית כמו קישור ואם תלחץ עליה יפתח לך קובץ עם התוכן של השדה (תוכן זה הוא טקסט פשוט בפורמט XML אבל בשדה מסוג XML מאחורי הקלעים הוא לא חייב להישמר בצורה זו) אבל אם אתה רוצה לגשת לאלמנט כלשהו בתוך השדה של ה XML למשל NODE מסויים אז יהיה צורך בכתיבה המתאימה * למעשה מאוד נפוץ לעבוד עם שדות XML כאילו הם שדות רגילים באפליקציות רבות. יותר מכך מדובר בברירת המחדל של דוט-נט למשל לשמור ככה נתונים של משתמשים מעבר לנתוני ברירת המחדל בשדה מסוג XML. כך אנחנו יכולים להוסיף לכל משתמש כמה מאפיינים שרוצים בלי לשנות כלום במבנה האלמנטים של בסיס הנתונים עצמו. אנחנו מכניסים לשדה XML פשוט טקסט בפורמט XML וככה יכולים ברמת השאילתה (כמו שמראה המדריך) לגשת לאלמנטים מסויימים בתוך השדה או שאפשר ברמת האפליקציה להתייחס לנתון כמו כל XML ולגשת לכל אלמנט שרוצים. כל מה שניתן לעשות בשדה מסוג XML דרך האפליקציה ניתן גם לעשות עם שדה טקסט רגיל בו נכניס טקסט בפורמט של XML. הייתרון של שדה מסוג XML הוא בעיקר בכך שגם השרת SQL מכיר בו כ XML ואז יכול לבצע פעולות הקשורות ל XML למשל ובכך לנצל את הכוח של XML (כמו למשל חיפוש אלנט מסויים או חיפוש אלמנט עם תכונה מסויימת וכו').
 

אבי רוד

New member
תגובה

בתוך השדה בפורמט XML יש מספר רב של נתונים ב- Nodes שונים. נניח ומעניינים אותי Nod אחד ספציפי או שניים. זה אפשרי לשלוף ספציפית רק אותם? מצאתי את הקישור הבא שקצת עזר לי: http://stackoverflow.com/questions/4815836/how-do-you-read-xml-column-in-sql-server-2008 זה לא התחום שלי ולכן אני אשמח אם תוכל/ו לעזור: הכיתוב : [1] , מציין את המיקום של ה- NOD בטקסט ה- XML? תודה על התגובות
 

pitoach

New member
בהחלט כן וזה למעשה הכוח העיקרי של שדה XML

בהחלט כן וזה למעשה הכוח העיקרי של שדה XML ניתן לגשת למשל ל NODE מסויים כל הרשומות שיש בטבלה ולהוציא את כל הנתונים מכל הרשומות בשאילתה פשוטה אחת. הקישור שהבאת כולל דוגמה נהדרת. נסה לךהכניס לטבלה שיש שם בדוגמה עוד רשומה ואז תריץ את השאילתה שוב SELECT N.C.value('ItemId[1]', 'int') ItemId, N.C.value('Value[1]', 'varchar(100)') Value FROM dbo.Sales CROSS APPLY CustomerList.nodes('//Customer') N(C) שאילתה זו מחזירה לך את כל ה NODE-ים של Customer בכל הרשומות ואם בכל רשומה יהיה רק NODE אחד אז תקבל תוצאה כמספר הרשומות אבל אם רשומה כוללת כמה NODE-ים של Customer אז תקבל את כולן (מומלץ לבדוק ולשחק עם זה קצת)
 
למעלה