আমি একটি জাভা বিকাশকারী, যা ডিবিএ ছাড়াই একটি দলে উঠতে হয়েছিল এবং যেখানে ডেভেলপার হিসাবে, আমি ডিবিএ অধিকার পেতে পারি না। আমাকে দুটি ডাটাবেসের মধ্যে একটি সম্পূর্ণ স্কিমা সরিয়ে নেওয়ার দায়িত্ব দেওয়া হয়েছিল, সুতরাং ডিবিএ না করেই আমাকে এটি করতে হয়েছিল এবং স্ক্রিপ্টগুলি চালিয়ে এটি করতে হয়েছিল, এসকিউএল সার্ভার ২০০৮-এ জিইউআই ব্যবহার করতে সক্ষম হচ্ছিলাম না কারণ আমার প্রশাসনিক অধিকার ছিল না।
সমস্ত কিছু ইস্যু ছাড়াই সরানো হয়েছিল, তবে, নতুন স্কিমা.ট্যাবেলে একটি সঞ্চিত প্রক্রিয়া চালানোর সময় আমি দেখতে পেলাম আমি একটি টেবিলে পরিচয় ক্ষেত্রটি হারিয়েছি। আমি টেবিলটি তৈরি করে এমন স্ক্রিপ্টটিকে ডাবল চেক করেছি এবং এটি ছিল, তবে, স্ক্রিপ্টটি চালানোর সময় এসকিউএল সার্ভার এটি পেল না। পরে আমাকে একটি ডিবিএ জানিয়েছিল যে সে আগে এই একই সমস্যাটি দেখেছিল।
যে কোনও ইভেন্টে, এসকিউএল সার্ভার ২০০৮-এর জন্য, এই সমাধানের জন্য আমি যে পদক্ষেপ নিয়েছি এবং তারা কাজ করেছে, তাই এটি কারওর জন্য সহায়ক হবে এই আশায় আমি এখানে পোস্ট করছি। অন্য টেবিলে এফকে নির্ভরতা থাকায় আমি এটি করেছি যা এটিকে আরও কঠিন করে তুলেছে:
আমি এই ক্যোয়ারীটি পরিচয়টি যাচ্ছিল তা যাচাই করার জন্য এবং টেবিলে নির্ভরতা দেখতে ব্যবহার করেছি।
১) একটি টেবিলে পরিসংখ্যান সন্ধান করুন:
exec sp_help 'dbo.table_name_old';
২) পিকে ক্ষেত্র যেখানে আগে ছিল সেখানে একটি পরিচয় ক্ষেত্র যুক্ত করা ছাড়া একটি সদৃশ, অভিন্ন টেবিল তৈরি করুন।
৩) ডেটা স্থানান্তর করতে পরিচয় অক্ষম করুন।
SET IDENTITY_INSERT dbo.table_name ON
৪) ডেটা স্থানান্তর করুন।
INSERT INTO dbo.table_name_new
(
field1, field2, etc...
)
SELECT
field1, field2, etc...
FROM
dbo.table_name_old;
5) তথ্য যাচাই করুন।
SELECT * FROM dbo.table_name_new
)) পরিচয়টি পুনরায় সক্ষম করুন।
SET IDENTITY_INSERT ToyRecP.ToyAwards.lkpFile_New OFF
).) কোন টেবিল (গুলি) মূল টেবিলটিকে নির্ভরতা হিসাবে উল্লেখ করে এবং আমি অনেকগুলি জুড়ে এসেছি তা যাচাই করার জন্য সমস্ত এফকে সম্পর্কগুলি খুঁজে পেয়েছি এটিই সেরা স্ক্রিপ্ট, তাই এটি রক্ষক!
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
ORDER BY ReferenceTableName;
৮) নিশ্চিত হয়ে নিন যে এই পদক্ষেপের আগে আপনার কাছে সমস্ত টেবিলের জন্য সমস্ত পিকে এবং এফকে স্ক্রিপ্ট রয়েছে।
9.) আপনি প্রতিটি কীতে ডান ক্লিক করতে পারেন এবং এসকিউএল সার্ভার 2008 ব্যবহার করে এটি স্ক্রিপ্ট করতে পারেন
১০) এই সিনট্যাক্সটি ব্যবহার করে নির্ভরতা টেবিল (গুলি) থেকে এফকে (গুলি) ফেলে দিন:
ALTER TABLE [dbo].[table_name] DROP CONSTRAINT [Name_of_FK]
১১) আসল টেবিলটি ফেলে দিন:
DROP TABLE dbo.table_name_old;
13.) এই পরবর্তী পদক্ষেপগুলি 9 ম পদক্ষেপে আপনি এসকিউএল সার্ভার ২০০৮ সালে তৈরি স্ক্রিপ্টগুলির উপর নির্ভর করে।
- নতুন টেবিলে পিকে যোগ করুন।
- নতুন টেবিলে এফকে যুক্ত করুন।
- এফকে এর পিছনে নির্ভরতা টেবিল এ যুক্ত করুন।
14.) যাচাই করুন সমস্ত কিছু সঠিক এবং সম্পূর্ণ। আমি টেবিলগুলি দেখতে জিইউআই ব্যবহার করেছি।
15.) নতুন টেবিলটির মূল টেবিলের নামকরণ করুন।
exec sp_RENAME '[Schema_Name.OldTableName]' , '[NewTableName]';
অবশেষে, সবকিছু কাজ!