এসকিউএল সার্ভার ২০০৮ ম্যানেজমেন্ট স্টুডিওতে আমি কোনও পাঠ্য বা বারচর (ম্যাক্স) কলামের সম্পূর্ণ সামগ্রীটি কীভাবে দেখতে পারি?


98

এই লাইভ এসকিউএল সার্ভার ২০০৮ (১০.০.১ build০০ তৈরি করুন) ডাটাবেসে, একটি Eventsটেবিল রয়েছে, যার মধ্যে একটি textকলাম রয়েছে Details। (হ্যাঁ, আমি বুঝতে পারি এটি আসলে একটি varchar(MAX)কলাম হওয়া উচিত , তবে যে কেউ এই ডাটাবেসটি সেট আপ করে সেভাবে এটি করেনি))

এই কলামটিতে ব্যতিক্রম এবং সম্পর্কিত জেএসওএন ডেটা রয়েছে যা আমি এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিওর মাধ্যমে অ্যাক্সেস করার চেষ্টা করছি তবে এটি যখনই আমি গ্রিড থেকে কোনও পাঠ্য সম্পাদককে ফলাফল অনুলিপি করি তখন এটি এটিকে ৪৩967৯ টি অক্ষরে ছেঁটে ফেলে।

আমি ইন্টারনেটে বিভিন্ন স্থানে পড়েছি যে আপনি এক্সএমএল ডেটা-র জন্য প্রাপ্ত সর্বাধিক অক্ষরগুলিকে Tools > Options > Query Results > SQL Server > Results To Gridআনলিমিটেডে সেট করতে পারেন এবং তারপরে একটি কোয়েরি সম্পাদন করতে পারেন:

select Convert(xml, Details) from Events
where EventID = 13920

(দ্রষ্টব্য যে ডেটাটি কলামটি একেবারেই এক্সএমএল নয় CONVERTX কলামটি এক্সএমএলকে নিছক কেবল গুগলিংয়ের কাছ থেকে পাওয়া যায় যে অন্য কেউ এসএসএমএসের textবা varchar(MAX)কলাম থেকে ডেটা পুনরুদ্ধার করার ক্ষেত্রে সীমাবদ্ধতার সীমা অতিক্রম করতে ব্যবহার করেছে ।)

যাইহোক, উপরে বিকল্পটি সেট করার পরে, ক্যোয়ারী চালানো, এবং ফলাফলটিতে লিঙ্কটিতে ক্লিক করার পরেও আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

এক্সএমএল দেখাতে অক্ষম। নিম্নলিখিত ত্রুটিটি ঘটেছে: ফাইলের অপ্রত্যাশিত সমাপ্তি ঘটেছে। লাইন 5, অবস্থান 220160।

একটি সমাধান হ'ল এক্সএমএল ডেটার জন্য সার্ভার থেকে প্রাপ্ত অক্ষরের সংখ্যা বৃদ্ধি করা। এই সেটিংটি পরিবর্তন করতে, সরঞ্জাম মেনুতে, বিকল্পগুলিতে ক্লিক করুন।

সুতরাং, কীভাবে এই ডেটা অ্যাক্সেস করবেন সে সম্পর্কে কোনও ধারণা? varchar(MAX)আমার সমস্যাগুলি সমাধানের জন্য কলামটি রূপান্তর করতে হবে?

উত্তর:


98

এসএসএমএস কেবল এক্সএমএল ডেটার জন্য সীমাহীন ডেটা মঞ্জুরি দেয়। এটি ডিফল্ট নয় এবং অপশনগুলিতে সেট করা দরকার।

এখানে চিত্র বর্ণনা লিখুন

একটি কৌশল যা বেশ সীমিত পরিস্থিতিতে কাজ করতে পারে তা হল নীচে কেবল কলামটির একটি বিশেষ পদ্ধতিতে নামকরণ করা যাতে এটি এক্সএমএল ডেটা হিসাবে ধরা হয়।

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,100000) + 'B' 

SELECT @S as [XML_F52E2B61-18A1-11d1-B105-00805F49916B]

এসএসএমএসে (কমপক্ষে সংস্করণ 2012 থেকে বর্তমানের 18.3 এর মধ্যে) এর ফলাফলগুলি নীচে হিসাবে প্রদর্শিত হয়

এখানে চিত্র বর্ণনা লিখুন

এটিতে ক্লিক করা এক্সএমএল দর্শকের সম্পূর্ণ ফলাফলগুলি খুলবে। ডানদিকে স্ক্রোলিং দেখায় যে বি এর শেষ চরিত্রটি সংরক্ষিত আছে,

তবে এর কিছু উল্লেখযোগ্য সমস্যা আছে। ক্যোয়ারীতে অতিরিক্ত কলাম যুক্ত করার ফলে প্রভাবটি ভেঙে যায় এবং অতিরিক্ত সারিগুলি প্রথমটির সাথে একত্রে সংযুক্ত হয়ে যায় become পরিশেষে যদি স্ট্রিংটিতে <এক্সএমএল ভিউয়ার খোলার মতো অক্ষর থাকে তবে বিশ্লেষণ ত্রুটি ব্যর্থ হয়।

এটি করার আরও শক্তিশালী উপায় যা এসকিউএল সার্ভার ইত্যাদিতে রূপান্তরিত <করতে &lt;বা এই অক্ষরগুলির কারণে ব্যর্থ হওয়া সম্পর্কিত বিষয়গুলি এড়িয়ে চলেছে ( ক্রেডিট অ্যাডাম মাচানিক এখানে ) is

DECLARE @S varchar(max)

SELECT @S = ''

SELECT @S = @S + '
' + OBJECT_DEFINITION(OBJECT_ID) FROM SYS.PROCEDURES

SELECT @S AS [processing-instruction(x)] FOR XML PATH('')

4
রূপান্তর বিবৃতিতে সিডিএটিএ যুক্ত করার কাজ হয়েছে! অনেক ধন্যবাদ. :)
অ্যাডামজফোর্ড

সংযোজন CDATAকাজ করতে পারে তবে আপনার ডেটাতে যদি নিয়ন্ত্রণের অক্ষর অন্তর্ভুক্ত থাকে তবে আপনাকে একটি প্রতিস্থাপন অপারেশন করতে হবে। আমার ক্ষেত্রে, আমি আমার ডেটাতে ইউনিট বিভাজক, এএসসিআইআই কোড 31 ব্যবহার করছিলাম। যেহেতু আমি কেবলমাত্র সেই চরিত্রটি অনেক জায়গায় ব্যবহার করছিলাম, তাই REPLACE(details, char(31), '&x1f;')যথেষ্ট সহজ । আমার যদি অজানা অক্ষর বা প্রতিস্থাপনের জন্য বিভিন্ন সংখ্যক বিভিন্ন চরিত্র থাকে তবে আমার আর একটি সমাধান খুঁজে পেতে হতে পারে।
জেরেফেথ

@ জারেফেথ - CDATAবিষয়টি আমার প্রথম পরামর্শ ছিল। পরের এক AS [processing-instruction(x)]যে এড়ানো।
মার্টিন স্মিথ

4
@ মার্টিনস্মিথ দুর্দান্ত উত্তর! আপনার উত্তরগুলি থেকে আমি কত কিছু শিখি তা অবাক করে দিন! +1
কিন শাহ


28

চারপাশের একটি কাজ হ'ল ফলাফল সেটটিতে ডান ক্লিক করুন এবং "ফলাফল হিসাবে সংরক্ষণ করুন ..." নির্বাচন করুন। এটি কলামের পুরো বিষয়বস্তু সহ এটি একটি সিএসভি ফাইলে রফতানি করে। নিখুঁত নয় তবে আমার পক্ষে যথেষ্ট কাজ করেছে।

কর্মক্ষেত্র


11

আপনি কি এই সহজ সমাধানটি চেষ্টা করেছিলেন? মাত্র 2 ক্লিক দূরে!

কোয়েরি উইন্ডোতে,

  1. "গ্রিডে ফলাফল" এ ক্যোয়ারী বিকল্পগুলি সেট করুন, আপনার ক্যোয়ারী চালান
  2. গ্রিড কোণে ফলাফল ট্যাবে ডান ক্লিক করুন, ফলাফল হিসাবে যে কোনও ফাইল সংরক্ষণ করুন

আপনি ফাইলটিতে দেখতে চান এমন সমস্ত পাঠ্য পাবেন !!! আমি একটি বর্ণচর্চা (MAX) ক্ষেত্রের ফলাফলের জন্য 130,556 টি অক্ষর দেখতে পাচ্ছি

একটি ফাইলের ফলাফল


4
সোজা - সহজ - এবং আপনার প্রয়োজন না হওয়া পর্যন্ত সর্বদা ভুলে যাওয়া :)
দিমি টাকিস

5

আমি খুঁজে পাওয়া সবচেয়ে সহজ কাজটি হল টেবিলটি ব্যাকআপ করা এবং স্ক্রিপ্টটি দেখা। এটা করতে

  1. আপনার ডাটাবেসটিতে ডান ক্লিক করুন এবং নির্বাচন করুন Tasks>Generate Scripts...
  2. "ভূমিকা" পৃষ্ঠা ক্লিক করুন Next
  3. "অবজেক্টস চয়ন করুন" পৃষ্ঠা
    1. চয়ন করুন Select specific database objectsএবং আপনার টেবিল নির্বাচন করুন।
    2. ক্লিক Next
  4. "স্ক্রিপ্টিং বিকল্পগুলি সেট করুন" পৃষ্ঠা
    1. আউটপুট টাইপ সেট করুন Save scripts to a specific location
    2. Save to fileসম্পর্কিত বিকল্পগুলি নির্বাচন করুন এবং পূরণ করুন
    3. Advancedবোতামটি ক্লিক করুন
    4. সেট General> Types of data to scriptথেকে Data onlyবা Schema and Dataএবং ওকে ক্লিক করুন
    5. ক্লিক Next
  5. "সংক্ষিপ্ত পৃষ্ঠা" ক্লিক করুন পরবর্তী
  6. আপনার স্কেল স্ক্রিপ্টটি আপনি 4.2 এ সেট করা বিকল্পগুলির উপর ভিত্তি করে তৈরি করা উচিত। এই ফাইলটি খুলুন এবং আপনার ডেটা দেখুন।

3

ডেটা টাইপ TEXT পুরানো এবং এটি আর ব্যবহার করা উচিত নয়, এটি একটি টেক্সট কলামের বাইরে ডেটা নির্বাচন করার জন্য ব্যথা।

ntext, পাঠ্য এবং চিত্র (লেনদেন-এসকিউএল)

মাইক্রোসফ্ট এসকিউএল সার্ভারের ভবিষ্যতের সংস্করণে এনটেক্সট, পাঠ্য এবং চিত্রের ডেটা প্রকারগুলি সরানো হবে। নতুন ডেটা ডেভলপমেন্ট কাজে এই ডেটা প্রকারগুলি ব্যবহার করা এড়িয়ে চলুন এবং বর্তমানে সেগুলি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলিকে সংশোধন করার পরিকল্পনা করুন। পরিবর্তে এনভারচর (সর্বাধিক), বর্ণচর্চা (সর্বাধিক) এবং ভের্বাইনারি (সর্বাধিক) ব্যবহার করুন।

পাঠ্যের ডেটা পুনরুদ্ধার করতে আপনার TEXTPTR (লেনদেন-এসকিউএল) ব্যবহার করতে হবে ।

পাঠ্য ডেটা প্রকার হ্যান্ডলিং সম্পর্কিত এই নিবন্ধটি দেখুন ।


varchar(MAX)এসএসএমএস থেকে ডেটা কাটা থেকে আটকাতে কলামটি রূপান্তর করা যাবে ?
অ্যাডামজফোর্ড

আপনার পাঠ্য কলামটি ভারচারে (সর্বোচ্চ) রূপান্তর করতে আমি প্রথমে এসএসএমএস ব্যবহার করব the আপনি যদি এটি আরও XML কলামে রূপান্তর করতে চান তবে সেখান থেকে আপনি মূল্যায়ন করতে পারেন। এসএসএমএস প্রদর্শনের সীমা হিসাবে, গ্রিডে ফলাফলগুলি কলামে নন এক্সএমএল ডেটা অংশের 65,535 টি পর্যন্ত অক্ষর প্রদর্শন করতে পারে এবং সীমিত পরিমাণে এক্সএমএল ডেটা (ফাই, এক্সএমএল টাইপের টেবিল কলামগুলি কেবল 2 জিবি সঞ্চয় করতে পারে)। যদিও পাঠ্যের ফলাফলগুলি প্রতি কলামে 8192 অক্ষরে সীমাবদ্ধ। এই ডিফল্ট সর্বাধিক সীমা নির্ধারণ করতে, কেবলমাত্র (এসএসএমএসে) সরঞ্জাম মেনুতে যান, তারপরে বিকল্পগুলি ... তারপরে QUERY ফলাফলগুলি, তারপরে এসকিউএল সার্ভার, তারপরে গ্রিডে ফলাফল বা ফলাফলের ফলাফল।
কেএম

3

দেখে মনে হচ্ছে এক্সএমএলটি ভালভাবে গঠিত না হতে পারে। যদি এটি হয় তবে আপনি এটি এক্সএমএল হিসাবে ableালতে সক্ষম হবেন না এবং এটির পরে আপনি ম্যানেজমেন্ট স্টুডিওতে কতটা পাঠ্য ফিরিয়ে দিতে পারবেন তা সীমাবদ্ধ। যাইহোক, আপনি পাঠ্যটি এভাবে ছোট ছোট ভাগে ভাগ করতে পারেন:

With Tally As
    (
        Select ROW_NUMBER() OVER ( ORDER BY s1.object_id ) - 1 As Num
        From sys.sysobjects As s1
            Cross Join sys.sysobjects As s2
    )
Select Substring(T1.textCol, T2.Num * 8000 + 1, 8000)
From Table As T1
    Cross Join Tally As T2
Where T2.Num <= Ceiling(Len(T1.textCol) / 8000)
Order By T2.Num

এরপরে আপনাকে ম্যানুয়ালি এগুলি আবার যুক্ত করতে হবে।

সম্পাদনা

শোনা যাচ্ছে textযে ডেটাতে কিছু অক্ষর রয়েছে যা এক্সএমএল পার্সার পছন্দ করে না। আপনি সেই মানগুলিকে সত্তায় রূপান্তর করতে চেষ্টা করতে পারেন এবং তারপরে Convert(xml, data)কৌশলটি চেষ্টা করতে পারেন । সুতরাং যেমন কিছু:

Update Table
Set Data = Replace(Cast(Data As varchar(max)),'<','&lt;')

(আমাকে ভারচারে (সর্বোচ্চ) কাস্ট করা দরকার কারণ প্রতিস্থাপন ফাংশন textকলামগুলিতে কাজ করবে না those এই textকলামগুলিতে আপনি রূপান্তর করতে পারবেন না এমন কোনও কারণ নেই should varchar(max))


ওহ, আমি মনে করি আমার উল্লেখ করা উচিত যে কলামটি মোটেই এক্সএমএল নয়। এক্সএমএলটিতে কলামটি সন্ধান করা কেবল গুগলিংয়ের কাছ থেকে পাওয়া গেছে যে অন্য কেউ এসএসএমএসের দ্বারা textবা varchar(MAX)কলাম থেকে ডেটা পুনরুদ্ধার করার ক্ষেত্রে সীমাবদ্ধতার সীমাটি পেয়েছে ।
অ্যাডামজফোর্ড

4
উপরে আপনার কোডের সম্পাদনা করুন; টালি হিসাবে (নির্বাচন করুন ROW_NUMBER () দ্বারা (S1.id দ্বারা অর্ডার নির্বাচন করুন) - 1 sys.sysobjects থেকে সংখ্যা হিসাবে s1 ক্রস s2.yssobjects হিসাবে S2 হিসাবে যোগদান করুন) সাবস্ট্রিং নির্বাচন করুন (T1.YourTextCol, T2.Num * 8000 + 1, 8000) আপনার টেবিল থেকে টি 1 ক্রস হিসাবে ট্যালি হিসাবে যোগ করুন T2 যেখানে T2.Num <= সিলিং (ডেটালেথ (T1.YourTextOL) / 8000) T2.Num দ্বারা অর্ডার করুন
ইয়ান কুইগলি

ব্যবহার TSQLএই উত্তরটি উপর ভিত্তি করে @IanQuigley থেকে আমার জন্য ভাল কাজ করেন। আমি মূলত ফলাফলগুলি নিয়েছি (11 টি রেকর্ড হয়ে শেষ হয়েছিল) এবং কেবল এগুলি নোটপ্যাডে একসাথে আটকালাম। নিখুঁতভাবে কাজ করেছেন। এই স্ক্রিপ্টটি সংরক্ষণ করা দরকার। আমার কিছু ক্রেজি লম্বা এক্সএমএল ছিল যাতে অবৈধ অক্ষরগুলি অন্তর্ভুক্ত ছিল।
এটকনওয়ে

1

আমি এই সাধারণ এক্সএমএল হ্যাকটিকে পছন্দ করি যা সেল-বাই সেল ভিত্তিতে এসএসএমএসে কলামগুলি ক্লিকযোগ্য করে তোলে। এই পদ্ধতির সাহায্যে আপনি এসএসএমএসের টেবুলার ভিউতে আপনার ডেটা দ্রুত দেখতে পারেন এবং নির্দিষ্ট কক্ষগুলি আকর্ষণীয় হলে সম্পূর্ণ মানটি দেখতে ক্লিক করতে পারেন। এটি XML ত্রুটিগুলি এড়ানো ব্যতীত ওপি-র কৌশলগুলির সাথে সমান।

SELECT
     e.EventID
    ,CAST(REPLACE(REPLACE(e.Details, '&', '&amp;'), '<', '&lt;') AS XML) Details
FROM Events e
WHERE 1=1
AND e.EventID BETWEEN 13920 AND 13930
;

নোট করুন যে কয়েকটি অক্ষর XML 1.0 এ অবৈধ তবে NVARCHAR/ এ বৈধ VARCHAR। উদাহরণস্বরূপ, NUL অক্ষর ( NULLক্ষেত্রের মান হিসাবে পৃথক )। কাস্ট এই জাতীয় এম্বেড করা মান সহ স্ট্রিংয়ের জন্য ব্যর্থ হবে।
বিনকি

1

এসএসএমএস 18.2 থেকে শুরু করে আপনি এখন গ্রিডের ফলাফলগুলিতে 2 মিলিয়ন অক্ষর দেখতে পারবেন। সূত্র

আরও তথ্য প্রদর্শিত হবে (পাঠ্যের ফলস্বরূপ) এবং কক্ষে সংরক্ষণ করা (গ্রিডের ফলাফল) ult এসএসএমএস উভয়ের জন্য এখন পর্যন্ত 2 এম পর্যন্ত অক্ষরের অনুমতি দেয়।

আমি নীচের কোড দিয়ে এটি যাচাই করেছি।

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,2000000) + 'B' 

SELECT @S as a

4
সর্বাধিক অক্ষরগুলি আসলে 2097152 ( এসএসএমএস সংস্করণ 15.0.18333.0 এ )।
stomy 22

0

আপনারা ভাগ্যের বাইরে আছেন বলে আমি মনে করি। আপনার অন্যান্য সমস্যাগুলির মধ্যে এসকিউএল স্তরের সমস্যা নেই কারণ অন্য সমস্ত উত্তরগুলিতে ফোকাস করা মনে হচ্ছে তবে এটি কেবল ব্যবহারকারী ইন্টারফেসের মধ্যে একটি। ম্যানেজমেন্ট স্টুডিও বলতে সাধারণ উদ্দেশ্য / জেনেরিক ডেটা অ্যাক্সেস ইন্টারফেস বোঝানো হয় না। এটি আপনার ইন্টারফেস হতে পারে না, তবে আপনার প্রশাসনিক অঞ্চল এবং এতে বাইনারি ডেটা এবং বৃহত্তর পরীক্ষার ডেটা পরিচালনা করার গুরুতর সীমাবদ্ধতা রয়েছে - কারণ নির্দিষ্ট ব্যবহারের প্রোফাইলের মধ্যে এটি ব্যবহার করা লোকেরা এই সমস্যায় পড়বে না।

বৃহত পাঠ্য ডেটা উপস্থাপন করা কেবল পরিকল্পিত ব্যবহার নয়।

আপনার একমাত্র পছন্দটি একটি টেবিলের মূল্যবান ফাংশন হবে যা পাঠ্য ইনপুট নেয় এবং প্রতিটি লাইনের জন্য এটি সারি কেটে দেয়, যাতে ম্যানেজমেন্ট স্টুডিও একক সারি নয়, সারিগুলির একটি তালিকা পায়।


আমার মনে হচ্ছে এই উত্তরটি অনুমান করা সর্বোত্তম, বা আপনার কাছে "পরিকল্পিত ব্যবহারের" জন্য কোনও উত্স আছে? যদি এটি কোনও এসকিউএল "ম্যানেজমেন্ট স্টুডিও" হয় তবে খুব কমপক্ষে এটি আমার ডেটাবেসগুলির সামগ্রী আমাকে দেখাতে সক্ষম হওয়া উচিত। একেবারে ভয়াবহ ইউআই।
damd

এই উত্তরটি আর প্রয়োগযোগ্য না হওয়ায় এই উত্তরটি মুছে ফেলা উচিত
Caius Jard
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.