এসকিউএল সার্ভার প্রবেশ করান tr


11

আমার কাছে একটি সঞ্চিত পদ্ধতি রয়েছে যা একটি টেবিলের মধ্যে 650 ক্ষেত্র সন্নিবেশ করে। সন্নিবেশটি একটি কাটা ত্রুটির সাথে ব্যর্থ হচ্ছে।

এটি একটি সাধারণ

INSERT INTO
SELECT (a bunch of fields) 
FROM (a bunch of tables)

নীচে ত্রুটি বার্তা:

এমএসজি 8152, স্তর 16, রাজ্য 14, পদ্ধতি ডিএসপি_প্রসেসার, লাইন 1075 স্ট্রিং বা বাইনারি ডেটা কেটে যাবে।

কোন দ্রুত উপায় আছে যে আমি কোন ক্ষেত্রটি কাটা ত্রুটি সৃষ্টি করছে তা সনাক্ত করতে পারি?

সারণিতে সন্নিবেশ করানোর জন্য বাছাই করা বিবৃতিটি 650 টি ক্ষেত্রের মধ্যে রয়েছে তা কোন ক্ষেত্রটি কাটা ত্রুটির কারণ হিসাবে চিহ্নিত করা কঠিন করে তোলে।

আমি ভাবছি আমি সম্ভবত একবারে ক্ষেত্রগুলির ব্লকগুলি মন্তব্য করতে পারি যাতে এসপি একবারে 100 টি ক্ষেত্র সন্নিবেশ করতে পারে এবং তারপরে এসপি 6 বা 7 বিভিন্ন সময় চালান যতক্ষণ না আমি কমপক্ষে 100 টি ক্ষেত্রের একটি গ্রুপে সংকীর্ণ না হয়ে পারি এতে এমন ক্ষেত্র থাকবে যা কাটা ত্রুটির সৃষ্টি করছে।

বিকল্পভাবে আমি ভাবছি যে সম্ভবত আমি কেবল SELECT INTOএকটি নতুন টেবিলটি তৈরি করতে পারি এবং তারপরে সারণিতে থাকা ডাটা লম্বাগুলির সাথে তুলনা করে লক্ষ্য টেবিলের ডেটা দৈর্ঘ্যের তুলনায় আমি আমার এসপিতে সন্নিবেশ করানোর চেষ্টা করছি যাতে কোন ফিল্ডটি প্রত্যাশিত ক্ষেত্রের দৈর্ঘ্যের চেয়ে দীর্ঘতর থাকে see ..

আমি এসকিউএল সার্ভার 2014 ব্যবহার করছি।

কোন সহজ বিকল্প?


1
আমি INFORMATION_SCHEMA.COLUMNS এ যাব এবং আপনি যে ডাটা সন্নিবেশ করানোর চেষ্টা করছেন তার সাথে ডাটা টাইপের তুলনা করব। দুর্ভাগ্যক্রমে এসকিউএল সার্ভারের ওআরএসিএল এর মতো চলক ঘোষণার জন্য গতিশীল ডেটাটাইপ নেই not
MguerraTorres

2
আমি আপনার দ্বিতীয় বিকল্পটি ব্যবহার করব, একটি নতুন (বা # টেম্প) সারণিতে প্রবেশ করিয়ে তারপরে কলামের দৈর্ঘ্যের তুলনা করব। অথবা আপনি নির্বাচিত সমস্ত কলামের চারপাশে লেন () মোড়ানো করতে পারেন এবং তারপরে প্রত্যেকের জন্য একটি ম্যাক্স () করতে পারেন ... যা আপনাকে ক্ষেত্রগুলির জন্য বৃহত্তম পাঠ্য দৈর্ঘ্য দেয়। অবশ্যই, এটি ধরে নিয়েছে এটি একটি চর ক্ষেত্র যা আপনাকে সমস্যা দিচ্ছে। স্মলডেটটাইম বা টিনিনেন্ট ব্যবহার করছেন না?
জোনাথন ফাইট

1
আমি "নির্বাচন করুন" পদ্ধতির সাথে যাব এবং কলামের দৈর্ঘ্যের তুলনা করব, হ্যাঁ। সম্ভবত "WHERE 1 = 0" দিয়ে যাতে সারণীতে কোনও সারি থাকে না। অদ্ভুত যদি আপনার নির্বাচনটি নির্বাচিত কলামগুলির জন্য স্বতন্ত্র নাম অন্তর্ভুক্ত না করে। আমি দীর্ঘ কলামের তালিকাগুলি প্রতি কলামে স্ক্রিপ্টের এক লাইন হিসাবে ফর্ম্যাট করি, তারপরে যদি প্রয়োজন হয় তবে পরবর্তী লাইনে "AS" কলামের নাম এবং চারটি কলামের পরে ফাঁকা রেখা যাতে তালিকায় স্থান রাখা সহজ হয়। এটি অনেকগুলি লাইন নির্বাচন করে এবং সেগুলিকে মন্তব্যে পরিবর্তন করতে Ctrl + K Ctrl + C করা সমর্থন করে, যাতে আপনি সন্নিবেশ ক্রিয়াকলাপটি সেভাবে আক্রমণ করতে পারেন, তবে কলামগুলি বাদ দেওয়া উচিত।
রবার্ট কার্নেগি

উত্তর:


3

আপনি যদি এসকিউএল সার্ভার 2016 (এসপি 2, সিই 6 বা আরও নতুন) তে থাকেন তবে একটি বিকল্প হ'ল উদাহরণস্বরূপ ট্রেস পতাকা 460 চালু করা (QUERYTRACEON 460)। আউটপুট কলাম এবং আপত্তিকর ডেটা নির্দেশ করবে।

বিশদ জন্য এই নিবন্ধটি দেখুন। https://www.brentozar.com/archive/2019/03/how-to-fix-the-error-string-or-binary-data-would-be-truncated/

আপনি যদি কাটা কাটা সম্পর্কে যত্নশীল না হন তবে আপনি SET ANSI_WARNINGS OFFসেই ধরণের কাটা উপেক্ষা করতে ব্যবহার করতে পারেন।


9

দুর্ভাগ্যক্রমে, আপনি বেশ পুরানো একটি "বৈশিষ্ট্য" এর মুখোমুখি হয়েছেন । ২০০৮ সাল থেকে এখানে একটি কানেক্টের টিকিট খোলা রয়েছে, এবং প্রায় দশ বছর ধরে এটি ঠিক করার জন্য যথেষ্ট পরিমাণে তাত্পর্যপূর্ণ হয়নি।

মান কার্যসংক্রান্ত মত মূর্ত, একটি হল, select into...টেবিল মেটাডেটা তুলনা করে। অপর সম্ভাবনা হ'ল আপত্তিজনক কলামটি বাইনারি অনুসন্ধান করা, তবে এটি ম্যানুয়ালও কাজ করে। মেটাডেটা তুলনার জন্য কিছু হ্যাক রয়েছে তবে সহজ, মার্জিত সমাধানের অস্তিত্ব নেই। হয়তো কিছু তৃতীয় পক্ষের সরঞ্জামগুলি সাহায্যকারী হতে পারে তবে আমি এগুলি সম্পর্কে অবগত নই।


1

(QUERYTRACEON 460) ব্যবহার করা আমার ক্যোয়ারির শেষে রাখার সময় আমার পক্ষে কাজ করে নি।

আমি এটি ডিবি স্তরে চালু করেছি এবং এটি কার্যকর হয়েছে:

DBCC TRACEON(460, -1);
GO

তবে, সমস্যাটি খুঁজে পেয়ে এবং সমাধান করার পরে এটি আবার বন্ধ করে দেওয়ার বিষয়টি নিশ্চিত করুন, এটি ছেড়ে যাবেন না!

DBCC TRACEOFF(460, -1);
GO
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.