আমি পাইভট তৈরি করতে এবং এটি এক্সএমএল ডেটাতে রূপান্তর করতে ব্লুফিট থেকে /dba//a/25818/113298 এই দুর্দান্ত উদাহরণটি ব্যবহার করছি ।
পরম ঘোষণা করছেন
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX);
এরপরে অনেকগুলি কোড সহ একটি সিটিই রয়েছে, সিটিইর শেষ ফলাফলটি একটি অস্থায়ী ডিবিতে রাখা হয় (উদাহরণের মতো)
SELECT
B.[StayDate] -- this is a date dd-mm-yyyy
, B.[Guid]
INTO #tempDates
FROM BaseSelection B
কলস তৈরি করা হচ্ছে (উদাহরণের মতো)
SELECT @cols = STUFF((SELECT distinct ',' +QUOTENAME(convert(char(10), [StayDate] , 120))
FROM #tempDates
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'');
ফলাফল সেটটি আমার প্রত্যাশা করা উচিত
set @query =
'SELECT [Guid],' + @cols +'
FROM
(
SELECT
[StayDate]
,[Guid]
FROM #tempDates
) A
pivot
(
count([StayDate])
for [StayDate] in (' + @cols +')
) p
'
EXEC sp_executesql @query ;
আমি যখন এটি এক্সএমএলে রূপান্তর করার চেষ্টা করি তখন আমার বৈশিষ্ট্যগুলি কেবল আংশিক রূপান্তরিত হয়
set @query =
'SELECT [Guid],' + @cols +'
FROM
(
SELECT
[StayDate]
,[Guid]
FROM #tempDates
) A
pivot
(
count([StayDate])
for [StayDate] in (' + @cols +')
) p
for xml auto
-- when using for XML path i will get a error
-- FOR XML PATH(''''), ROOT(''root'')
-- Msg 6850, Level 16, State 1, Line 3
-- Column name '2016-12-17' contains an invalid XML identifier
-- as required by FOR XML; '2'(0x0032) is the first character at fault.
'
EXEC sp_executesql @query ;
ফলাফল সেট
<p Guid="3C3359E3-CFE5-E511-80CA-005056A90901"
_x0032_016-12-17="2" --> should be 2016-12-17="2"
_x0032_016-12-18="2" --> should be 2016-12-18="2"
_x0032_016-12-19="2" --> should be 2016-12-19="2"
/>
আমি কি কিছু মিস করেছি, কেন কেবল তারিখের একটি অংশ ইউনিকোডে রূপান্তরিত হয়?
আমি এটা কিভাবে ঠিক করবো?