گرفتن خروجی XML از جداول در SQL Server 2012
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

فرض کنید که می‌خواهیم خروجی از جدول خود را به صورت XML نمایش یا از طریق وب سرویس در برنامه مان استفاده نماییم. اولین راهی که به ذهنمان می‌رسد خودمان  رشته xml را با حلقه ای ایجاد نماید یا استفاده از فضای نام System.Xml و کلاس‌های نوشته شده برای این کار . اما خود Sql Server امکانات ویژه ای برای کار با ساختار xml مهیا نموده که براحتی می‌توانید خروجی xml از داده هایتان ایجاد نمایید.

برای این کار از عبارت For XML در Select می‌توان استفاده نمود. برای مثال برای بدست آوردن ساختار ساده از For Xml Auto استفاده نمایید
SELECT BusinessEntityID, PersonType, Title, FirstName, MiddleName, LastName
FROM Person
WHERE BusinessEntityID = 10001
FOR XML AUTO
که خروجی بصورت node attribute زیر می‌باشد:

اما اگر بخواهیم خروجی به صورت node Elements باشد کافیست از پارامتر Elements استفاده نمایید 

SELECT BusinessEntityID, PersonType, Title, FirstName, MiddleName, LastName
FROM Person
WHERE BusinessEntityID = 10001
FOR XML AUTO, ELEMENTS

خروجی بصورت زیر می‌باشد:

اگر بخواهیم node attributes و node elements با هم ترکیب کنیم بصورت زیر عمل می‌کنیم:

SELECT BusinessEntityID AS '@ID', PersonType, Title,  FirstName, MiddleName, LastName
FROM Person
WHERE BusinessEntityID = 10001
FOR XML ELEMENTS

خروجی بصورت زیر است:

حال می‌خواهیم همه node‌ها را یک node ریشه قرار دهیم برای این کار از پارامتر ROOT در کنار AUTO به صورت زیر استفاده نمایید:

SELECT *
FROM Person
WHERE BusinessEntityID = 15291
FOR XML AUTO , ROOT('Persons')

اما اگر بخواهیم نام جدول را با نام دلخواه خود تغییر دهیم از پارامتر PATH به جای  AUTO به صورت زیر استفاده نمایید:

SELECT *
FROM Person
WHERE BusinessEntityID = 15291
FOR XML PATH('P') , ROOT('Persons')
  • #
    ‫۱۱ سال و ۱۰ ماه قبل، یکشنبه ۱۹ آذر ۱۳۹۱، ساعت ۰۳:۵۶
    بسیار تکنیک کارامدی بود. واقعا متشکرم
  • #
    ‫۱۱ سال و ۱۰ ماه قبل، یکشنبه ۱۹ آذر ۱۳۹۱، ساعت ۱۰:۵۹
    سلام  
    مرسی از مطلب مفید تان
  • #
    ‫۱۱ سال و ۱۰ ماه قبل، یکشنبه ۱۹ آذر ۱۳۹۱، ساعت ۱۴:۳۸
    بسیار عالی بود ، خیلی برام مفید واقع شد 
    راه مشابه ای برای خروجی Json نیست؟
    ممنون
  • #
    ‫۱۰ سال و ۱۰ ماه قبل، یکشنبه ۱۷ آذر ۱۳۹۲، ساعت ۲۲:۲۸
    حالا دستور Insert نداریم که بشه یه فایل xml رو مثل فایل backup روی دیتابیس restore کنیم؟
    • #
      ‫۱۰ سال و ۱۰ ماه قبل، دوشنبه ۱۸ آذر ۱۳۹۲، ساعت ۰۴:۲۹

      - می‌تونی با کدنویسی اینکار رو انجام بدی:

      var reportData = new DataSet();
      reportData.ReadXml("yourfile.xml");
      var connection = new SqlConnection("DB ConnectionSTring");
      var sbc = new SqlBulkCopy(connection);
      sbc.DestinationTableName = "yourXMLTable";
      - یا می‌تونی از import و export خود SQL Server استفاده کنی.
      - و یا از OPENXML میشه استفاده کرد:
      INSERT Customers 
      SELECT * 
      FROM OPENXML ...
  • #
    ‫۱۰ سال و ۷ ماه قبل، چهارشنبه ۳۰ بهمن ۱۳۹۲، ساعت ۰۱:۲۱
    تشکر فراوان از این مطلب فوق العاده کاربردی. یه نکته کوچک به ذهنم رسید. سومین قطعه کدی که نوشتید در جدول من کار نکرد به نظرم اومد که شاید اینچنین بوده باشه :
    کد شما
    FOR XML ELEMENTS
    کدی که من مد نظرم هست و در جدول من کار می‌کنه :
      for xml auto, ELEMENTS