আমি বুঝতে পারি যে এখানে 4000 সর্বাধিক সেট রয়েছে NVARCHAR(MAX)
আপনার বোঝাপড়া ভুল। nvarchar(max)
2 গিগাবাইট ডেটা (1 বিলিয়ন ডাবল বাইট অক্ষর) পর্যন্ত সঞ্চয় করতে পারে।
অনলাইনে বইগুলিতে এনসিআর এবং এনভারচর থেকে ব্যাকরণটি হয়
nvarchar [ ( n | max ) ]
|
চরিত্র মানে এই বিকল্প। যেমন আপনি উভয় n
বা আক্ষরিক নির্দিষ্ট max
।
আপনি যদি কোনও নির্দিষ্ট উল্লেখ করতে চান n
তবে এটি অবশ্যই 1 এবং 4,000 এর মধ্যে হওয়া উচিত তবে max
এটি একটি বৃহত অবজেক্ট ডেটাটাইপ হিসাবে সংজ্ঞায়িত করে (প্রতিস্থাপন ntext
যার জন্য অবমূল্যায়ন করা হয়)।
আসলে এসকিউএল সার্ভার ২০০৮ এ দেখে মনে হচ্ছে যে একটি ভেরিয়েবলের জন্য 2 গিগাবাইটের সীমাটি পর্যাপ্ত জায়গার অধীনে অনির্দিষ্টকালের জন্য অতিক্রম করা যেতে পারে tempdb
( এখানে দেখানো হয়েছে )
আপনার প্রশ্নের অন্যান্য অংশ সম্পর্কিত
সংক্ষিপ্তকরণ যখন ডেটাটাইপ উপর নির্ভর করে কাটা।
varchar(n) + varchar(n)
8,000 অক্ষর ছাঁটাই করা হবে।
nvarchar(n) + nvarchar(n)
4,000 অক্ষর ছাঁটাই করা হবে।
varchar(n) + nvarchar(n)
4,000 অক্ষর ছাঁটাই করা হবে। nvarchar
ফলাফল বেশি তাই উচ্চতর প্রাধান্য রয়েছেnvarchar(4,000)
[n]varchar(max)
+ [n]varchar(max)
কেটে যাবে না (<2GB এর জন্য)।
varchar(max)
+ varchar(n)
কে <কা> ছাড়বে না (<2 গিগাবাইটের জন্য) এবং ফলাফলটি টাইপ করা হবে varchar(max)
।
varchar(max)
+ nvarchar(n)
কে <কা> ছাড়বে না (<2 গিগাবাইটের জন্য) এবং ফলাফলটি টাইপ করা হবে nvarchar(max)
।
nvarchar(max)
+ varchar(n)
প্রথমে varchar(n)
ইনপুটটি রূপান্তর করবে nvarchar(n)
এবং তারপরে সংক্ষেপণ করবে। স্ট্রিংয়ের দৈর্ঘ্য যদি varchar(n)
4,000 টিরও বেশি অক্ষরের চেয়ে বেশি হয় তবে nvarchar(4000)
নিক্ষেপটি হবে এবং ছাঁটাই হবে ।
স্ট্রিং লিটারেলের ডেটাটাইপস
আপনি যদি N
উপসর্গটি ব্যবহার করেন এবং স্ট্রিংটি <= 4,000 অক্ষর দীর্ঘ হয় তবে টাইপ করা হবে স্ট্রিংটির দৈর্ঘ্য nvarchar(n)
কোথায় n
। তাই N'Foo'
বলে গণ্য হবে nvarchar(3)
উদাহরণস্বরূপ। যদি স্ট্রিং 4,000 টির চেয়ে বেশি অক্ষরের হয় তবে এটি হিসাবে বিবেচিত হবেnvarchar(max)
আপনি যদি N
উপসর্গটি ব্যবহার না করেন এবং স্ট্রিংটি <= 8,000 অক্ষর দীর্ঘ হয় তবে এটি টাইপ করা হবে কারণ স্ট্রিংটির দৈর্ঘ্য varchar(n)
কোথায় n
। আর যদি হয়varchar(max)
উপরের উভয়ের জন্য যদি স্ট্রিংয়ের দৈর্ঘ্য শূন্য হয় তবে n
1 তে সেট করা আছে।
আরও নতুন সিনট্যাক্স উপাদান।
1.CONCAT
ফাংশন এখানে সাহায্য না
DECLARE @A5000 VARCHAR(5000) = REPLICATE('A',5000);
SELECT DATALENGTH(@A5000 + @A5000),
DATALENGTH(CONCAT(@A5000,@A5000));
উভয় উপসংহারের জন্য উপরেরটি 8000 প্রদান করে।
2. সাবধান+=
DECLARE @A VARCHAR(MAX) = '';
SET @A+= REPLICATE('A',5000) + REPLICATE('A',5000)
DECLARE @B VARCHAR(MAX) = '';
SET @B = @B + REPLICATE('A',5000) + REPLICATE('A',5000)
SELECT DATALENGTH(@A),
DATALENGTH(@B);`
ফিরে আসে
8000 10000
দ্রষ্টব্য যে @A
কাটা কাটা সম্মুখীন।
আপনি যে সমস্যার মুখোমুখি হচ্ছেন তা কীভাবে সমাধান করবেন।
আপনি দু'জন নন max
ডেটাটাইপ একসাথে তৈরি করার কারণে বা আপনি কোনও টাইপযুক্ত স্ট্রিংয়ের (এমনকি ) varchar(4001 - 8000)
স্ট্রিংটিতে সংযোগ দিচ্ছেন বলে আপনি ছাঁটাই পেয়ে যাচ্ছেন ।nvarchar
nvarchar(max)
দ্বিতীয় সমস্যাটি এড়ানোর জন্য কেবল নিশ্চিত হয়ে নিন যে সমস্ত স্ট্রিং লিটারালগুলি (বা কমপক্ষে 4001 - 8000 রেঞ্জের দৈর্ঘ্য সহ) প্রবর্তিত আছে N
।
প্রথম সমস্যাটি এড়াতে এসাইনমেন্টটি থেকে পরিবর্তন করুন
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = 'Foo' + 'Bar' + ...;
প্রতি
DECLARE @SQL NVARCHAR(MAX) = '';
SET @SQL = @SQL + N'Foo' + N'Bar'
যাতে কোনও NVARCHAR(MAX)
শুরু থেকে এই সম্মেলনে জড়িত থাকে (প্রতিটি যুক্তির ফলাফল হিসাবে এটিও NVARCHAR(MAX)
প্রচার করবে)
দেখার সময় কাটা কাটা এড়ানো
আপনার "গ্রিড টু ফলাফল" মোডটি নির্বাচিত হয়েছে তা আপনি ব্যবহার করতে পারেন তা নিশ্চিত করুন
select @SQL as [processing-instruction(x)] FOR XML PATH
এসএসএমএস বিকল্পগুলি আপনাকে XML
ফলাফলের জন্য সীমাহীন দৈর্ঘ্য সেট করতে দেয় । processing-instruction
বিট যেমন অক্ষর সমস্যা এড়াতে <
যেমন দেখানো <
।