سفارشی سازی کوئری برای بازگرداندن نتایج به فرمت XML

در این درس آموزشی، شما با نحوه سفارشیسازی کوئریها در SQL Server جهت بازگرداندن نتایج به فرمت XML آشنا میشوید. ابتدا به بررسی دستور SELECT از جدول Employee.HumanResources پرداخته و سپس با استفاده از دستور FOR XML RAW دادهها به فرمت XML و در قالب attributes نمایش داده میشود. در ادامه، با استفاده از FOR XML AUTO، دادهها به صورت XML با نام جدول به عنوان تگهای اصلی بازنمایی میشوند. این روشها به شما کمک میکند تا بتوانید دادههای خود را به راحتی در قالب XML ساختاربندی کرده و در برنامههای مختلف از آن بهرهبرداری کنید. در این ویدیو، شما یاد خواهید گرفت که چگونه دادههای SQL را به فرمت XML تبدیل کرده و با استفاده از دستورات مختلف XML نتایج دلخواه خود را استخراج کنید.
در این ویدئوی آموزشی، برخی از ابزارها و تکنیک های مربوط به نحوه بازگردوندن فرمت داده xml از sql server رو بررسی میکنیم. بنابراین با یه دستور select پایه ای شروع میکنیم که خیلی شبیه به چیزی هست که در تمرینای قبلی استفاده می کردیم. خب همونطور که می بینید این دستور درست شبیه همون تمرینی هست که باهاش قبلا فقط 4 ستون رو از جدول Employee.HumanResources انتخاب می کردیم.
اگه اون رو اجرا کنیم، میبینیم که داده ای که برگردونده میشه فرمت جدولی داره یا به اصطلاح یک tabular format هست. منظور از فرمت جدولی یا tabular format همون شکل یا فرمت سطر و ستون است، که الان در این زیر یک نمونه از این جدول رو بوضوح می بینیم. حالا اگه ما تمایل داشته باشیم نرم افزار sql server 2016 دقیقا فرمت xml رو به جای فرمت جدولی یا همون tabular format بهمون برگردونه، کافیه که ما 3 کلمه کلیدی کوچیک و مختصر رو در آخر دستور select اضافه کنیم.
در حال حاضر اگه FOR XML RAW رو اضافه کنم، به این صورت که سه کلمه باید جدا جدا باشن، و بین هر کدوم از اونها فاصله، قرار میگیره.
سپس اون رو مجددا اجرا میکنم و در ابتدا فقط یه برش کوچیکی از یک کد xml طویل رو درست در این پایین میبینم.
اگه روی اون کلیک کنیم، به داکیومنت وسند کاملش ارجاع داده می شیم و میبینیم که داده ها دقیقا مثل قبل هستن فقط فرمت اونها بجای اینکه بصورت جدولی یا tabular format باشن بفرمت xml شده، بدین صورت که یه سطر که با نام row اون رو در این سند مشاهده می کنیم از فرمت جدولی یا tabular format تبدیل به یک خط کد با فرمت xml شده و همینطور که مشاهده می کنید تمام ستون های جدول قبلی از طریق روش ارائه اطلاعات attributes در قالب کدهای xml برامون قابل مشاهده شدن. اگه یادتون باشه در ویدئوی آموزشی قبلی با دو روش اصلی مشاهده کدهای xml بنام های attributes و elements آشنا شدیم و الان می بینیم که با استفاده از 3 کلمه ای که به آخر دستور select اضافه کردیم یعنی کلمات FOR XML RAW کدهای xml با این شکل برامون قابل مشاهده هستن. واضح تر بگم هر کد در قالب یک خط در تگ row و با چهار ویژگی loginid و jobtitle و vacationhours و birthdate رو مشاهده می کنیم. نهایتا مقادیر هر یک از این چهار ویژگی رو در یک جفت کوتیشن بعد از علامت مساوی برای تمام داده های نظیر از جدول Employee.HumanResources رو الان به روش attributes مشاهده می کنیم.
پس مجدد میگم الان ما loginID وJobTitle رو داریم که اگه به سمت راست بریم، VacationHours و BirthDate رو هم میبینیم.
بنابراین در اینجا همه 4 ستونی که در دستور select فراخونی شون رو سفارشی کردیم به عنوان یک کد xml از نوع attributes در قالب یک خط و تگ row وجود دارن. دقت کنین عنصر استفاده شده برای هر خطrow هست، r-o-w. اگه این رو ببندیم و دنبال یه تکنیک متفاوتتر باشیم به جای FOR XML RAW، میتونیم FOR XML AUTO ،A-U-T-O رو بذاریم.
زمانی که اون رو اجرا میکنیم، دوباره یک برش کوچیکی از یک کد XML طویل رو درست در این پایین میبینیم که با کلیک روی اون میبینیم که نتایج خیلی شبیه چند لحظه پیش هستن درست شبیه زمانی که اومدیم و از 3 کلمه FOR XML RAW استفاده کردیم، ولی الان که از 3 کلمه FOR XML AUTO در دستور select ام استفاده می کنم اگر چه می بینیم عنصرROW یا به عبارتی همون تگ row وجود نداره ولی حالا به جای اون نام جدول برامون بعنوان تگ قابل مشاهده هست. بنابراین HumanResources.Employee نام دقیقی از جدولی هست که بصورت تگ جدیدمون در فرمت xml کنونی بنمایش درومده. بقیه داده های موجود در هر خط xml دقیقا مثل همون زمانی هست که از 3 کلمه FOR XML RAW در دستور select مون استفاده کردیم.
ما هنوز همه داده ها را در حالت attributes داریم یعنی اینکه همه ستون هایی که میخاستیم در یک خط فراخونی میشن و می بینیم که مقدار هر ویژگی در داخل یک جفت تک کوتیشن قرار گرفتن و نهایتا بعد از یک مساوی قابل نمایش هستن.
بنابراین ما این رو میبندیم.
حالا اگه شما attributes رو نخواید و ترجیح بدین که داده رو به عنوان یک عنصر یا روش elements برگردونین شک نکنین که خیلی راحت میتونیم این کار رو همین جا در دستور select مون انجام بدیم باز هم میگم انجام این کار خیلی راحته و برای برگردون یک کد به حالت نمایش کدهای xml با روش elements، کافیه که اینجا بجای auto بنویسیم path پس تغییرمون ایندفعه بصورت FOR XML PATH خواهد بود. P-A-T-H، PATH
ما اون رو اجرا میکنیم و این بار میبینیم که همه داده ها با روش elements برگردونده شدن. خب اگه دقت کنید با استفاده از 3 کلمه کلیدی FOR XML PATH تگ های اصلی ROW در قالب یک کد xml، elements برامون بنمایش در میان، پس المنت اصلی یا باصطلاح parent element اینجا ROW نامیده شده و تگ های دیگه مون با نام باصطلاح child elements در زیر هر تگ ROW قرار گرفتن 4 عنصر فرزند loginID، jobTitle ،vacation hours و birthdata که مقادیر مربوط به هر تگ در داخل یک جفت تگ بنمایش درومده. مثلا اینجا یک تگ loginid که یکی از ستون های دستور selecte اصلی مون محسوب میشه و یکی از مقادیری هستش که میخاستیم از جدول HumanResources.Employee برامون برگردونده بشه، در اینجا قابل مشاهده هست و باز هم اگه یادتون باشه در روش elements هر تگی که بیان کننده یک مقدار مشخص بود دو بار تکرار میشه و ما هم می بینیم که کلمه loginid دوبار تکرار شده و مقدار واقعیش رو اینجا با نام adventure-works\ken0 مشاهده می کنیم. اینم بگم که هر سطر از جدول دستور selecte عادیمون اینجا در بین دو تگ row قابل نمایش هست و این علامت های منهای کوچیک اینجا سمت چپ هر کدوم، یک سطر از جدولمون رو فراخونی کردن و اون سطرها رو با حالت ایکس ام ال از نوع elements داره با هر کدوم از این علامت های منها نمایش میده. پس از سطر یک تا 6 اینجا ما فقط یک سطر از همون جدول ابتدایی این آموزش رو داریم که هر کدوم از ستون هاش بصورت جدا جدا در سطرهای 2 و 3 و 4 و 5 تعریف شدن و به همین ترتیب از سطر 7 تا 12 هم یک سطر دیگه از همون جدولمون رو داریم و بقیه سطرها رو هم پایین تر می بینیم.
پس دیدیم برگردوندن فرمت به شکل xml خیلی راحته.
همونطور که مشاهده کردین، اگه شما ی دستور select داشته باشین، باید اون رو یک مقدار اصلاح کنین تا به شکل xml درش بیارین. فقط کافیه عبارت FOR XML PATH رو اضافه کنین. این کار با هر دستور select دیگه ای هم انجام میشه و نوشتن این 3 کلمه FOR XML PATH باعث میشه فرمت کد به حالت element بهتون برگردونده بشه و برای هر دستور select دیگه ای هم کار میکنه.
پس، برای مثال اگه ی عبارت where در اینجا داشته باشیم وجود اون چیزی رو عوض نمیکنه و روی دستور ما اثر نداره. فقط میاد و نتایج رو سفارشی تر میکنه و همچنین ما میتونیم بند order by رو داشته باشیم دقیقا به این شکل و در پایان عبارت. FOR XML PATH، FOR XML RAWو یا FOR XML AUTO رو قرار بدیم و همونطور که می بینید اگه این دستورم رو اجراش کنم دقیقا همین داده های معمول رو فقط در فورمت xml و نه در قالب جدولی، نرم افزار براحتی بهمون برمیگردونه.