বিস্ময় প্রকাশ করতে ব্যবহৃত। এটি আবিষ্কারের জন্য সত্যই একটি দরকারী থ্রেড ছিল।
আমি এখনও এই পরামর্শগুলির মধ্যে কিছু বিভ্রান্তিকর পেয়েছি। আমি যখনই স্ট্রিংয়ের value
সাথে ব্যবহার করেছি [1]
, এটি কেবলমাত্র প্রথম মানটি পুনরুদ্ধার করবে। এবং কিছু প্রস্তাবনা cross apply
যা ব্যবহার করে সুপারিশ করা হয়েছিল (আমার পরীক্ষাগুলিতে) সবেমাত্র অনেক বেশি ডেটা ফিরিয়ে এনেছে।
সুতরাং, আপনি কীভাবে কোনও xml
অবজেক্ট তৈরি করতে চান তার আমার সহজ উদাহরণ এখানে তার মানগুলি একটি টেবিলের মধ্যে পড়ুন।
DECLARE @str nvarchar(2000)
SET @str = ''
SET @str = @str + '<users>'
SET @str = @str + ' <user>'
SET @str = @str + ' <firstName>Mike</firstName>'
SET @str = @str + ' <lastName>Gledhill</lastName>'
SET @str = @str + ' <age>31</age>'
SET @str = @str + ' </user>'
SET @str = @str + ' <user>'
SET @str = @str + ' <firstName>Mark</firstName>'
SET @str = @str + ' <lastName>Stevens</lastName>'
SET @str = @str + ' <age>42</age>'
SET @str = @str + ' </user>'
SET @str = @str + ' <user>'
SET @str = @str + ' <firstName>Sarah</firstName>'
SET @str = @str + ' <lastName>Brown</lastName>'
SET @str = @str + ' <age>23</age>'
SET @str = @str + ' </user>'
SET @str = @str + '</users>'
DECLARE @xml xml
SELECT @xml = CAST(CAST(@str AS VARBINARY(MAX)) AS XML)
-- Iterate through each of the "users\user" records in our XML
SELECT
x.Rec.query('./firstName').value('.', 'nvarchar(2000)') AS 'FirstName',
x.Rec.query('./lastName').value('.', 'nvarchar(2000)') AS 'LastName',
x.Rec.query('./age').value('.', 'int') AS 'Age'
FROM @xml.nodes('/users/user') as x(Rec)
এবং এখানে ফলাফল:
এটি উদ্ভট সিনট্যাক্স, তবে একটি সুন্দর উদাহরণ সহ, এটি আপনার নিজের এসকিউএল সার্ভারের কার্যাদি যুক্ত করা যথেষ্ট সহজ।
যার বিষয়ে কথা বলছি, এখানে এই প্রশ্নের সঠিক উত্তর।
ধরে নিচ্ছি আপনার @xml
প্রকারের ভেরিয়েবলটিতে আপনার এক্সএমএল ডেটা রয়েছে xml
(উপরে আমার উদাহরণে প্রদর্শিত হিসাবে), আপনি কীভাবে প্রশ্নের উত্তর দেওয়া এক্সএমএল থেকে তিনটি সারি ডেটা ফেরত পাবেন:
SELECT
x.Rec.query('./firstName').value('.', 'nvarchar(2000)') AS 'FirstName',
x.Rec.query('./lastName').value('.', 'nvarchar(2000)') AS 'LastName'
FROM @xml.nodes('/person') as x(Rec)