টেবিলে সমস্যাযুক্ত কলামগুলির আকার বাড়ানোর পরেও আমার একই সমস্যা ছিল।
tl; dr: সংশ্লিষ্ট সারণী প্রকারের সাথে মেলানো কলামগুলির দৈর্ঘ্য বাড়ানোর প্রয়োজনও হতে পারে।
আমার ক্ষেত্রে, ত্রুটিটি মাইক্রোসফ্ট ডায়নামিক্স সিআরএম-এর ডেটা এক্সপোর্ট পরিষেবা থেকে এসেছিল, যা সিআরএম ডেটা কোনও এসকিউএল সার্ভার ডিবি বা অ্যাজুরি এসকিউএল ডিবিতে সিঙ্ক করার অনুমতি দেয়।
দীর্ঘ তদন্তের পরে, আমি সিদ্ধান্তে পৌঁছেছি যে ডেটা এক্সপোর্ট পরিষেবা অবশ্যই টেবিল-মূল্যবান প্যারামিটার ব্যবহার করবে :
আপনি কোনও অস্থায়ী টেবিল বা অনেকগুলি পরামিতি তৈরি না করে কোনও লেনদেন-এসকিউএল বিবৃতিতে বা একটি রুটিনে একাধিক সারি ডেটা প্রেরণে টেবিল-মূল্যবান প্যারামিটার ব্যবহার করতে পারেন।
আপনি উপরের ডকুমেন্টেশনে দেখতে পাচ্ছেন, ডাটা ইনজেশন পদ্ধতি তৈরি করতে টেবিল প্রকারগুলি ব্যবহৃত হয়:
CREATE TYPE LocationTableType AS TABLE (...);
CREATE PROCEDURE dbo.usp_InsertProductionLocation
@TVP LocationTableType READONLY
দুর্ভাগ্যক্রমে, কোনও সারণির ধরণের পরিবর্তন করার কোনও উপায় নেই, সুতরাং এটি ফেলে দেওয়া এবং পুনরায় তৈরি করতে হবে। যেহেতু আমার টেবিলটির 300 টিরও বেশি ক্ষেত্র (😱) রয়েছে, তাই আমি টেবিলের কলাম সংজ্ঞা (কেবলমাত্র [table_name]
আপনার টেবিলের নামটি দিয়ে প্রতিস্থাপন করুন ) এর উপর ভিত্তি করে সংশ্লিষ্ট সারণী প্রকার তৈরির সুবিধার্থে একটি অনুসন্ধান তৈরি করেছি :
SELECT 'CREATE TYPE [table_name]Type AS TABLE (' + STRING_AGG(CAST(field AS VARCHAR(max)), ',' + CHAR(10)) + ');' AS create_type
FROM (
SELECT TOP 5000 COLUMN_NAME + ' ' + DATA_TYPE
+ IIF(CHARACTER_MAXIMUM_LENGTH IS NULL, '', CONCAT('(', IIF(CHARACTER_MAXIMUM_LENGTH = -1, 'max', CONCAT(CHARACTER_MAXIMUM_LENGTH,'')), ')'))
+ IIF(DATA_TYPE = 'decimal', CONCAT('(', NUMERIC_PRECISION, ',', NUMERIC_SCALE, ')'), '')
AS field
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '[table_name]'
ORDER BY ORDINAL_POSITION) AS T;
সারণী প্রকারটি আপডেট করার পরে, ডেটা রফতানি পরিষেবাটি আবারও সঠিকভাবে কাজ শুরু করে! :)