আমি একটি এসকিউএল সার্ভার ডাটাবেসের একটি টেবিল থেকে কিছু রেকর্ড মুছে ফেলেছি। এখন আইডিটি 101 থেকে 1200 পর্যন্ত চলেছে I আমি আবার রেকর্ডগুলি মুছতে চাই, তবে আমি চাইছি আইডিটি আবার 102 এ ফিরে যেতে S এসকিউএল সার্ভারে এটি করার কোনও উপায় আছে কি?
আমি একটি এসকিউএল সার্ভার ডাটাবেসের একটি টেবিল থেকে কিছু রেকর্ড মুছে ফেলেছি। এখন আইডিটি 101 থেকে 1200 পর্যন্ত চলেছে I আমি আবার রেকর্ডগুলি মুছতে চাই, তবে আমি চাইছি আইডিটি আবার 102 এ ফিরে যেতে S এসকিউএল সার্ভারে এটি করার কোনও উপায় আছে কি?
উত্তর:
1 টি থেকে শুরু করার জন্য পুনরায় রচনাযোগ্য মাইটিবেলে নিম্নলিখিত কমান্ডটি জারি করুন:
DBCC CHECKIDENT (mytable, RESEED, 0)
বইগুলি অন লাইনে এটি সম্পর্কে পড়ুন (বিওএল, এসকিউএল সহায়তা)। আপনি যে বীজ স্থাপন করছেন তার চেয়ে বেশি রেকর্ড যাতে না থাকে সেদিকেও খেয়াল রাখুন।
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT('databasename.dbo.tablename', RESEED, number)
যদি সংখ্যা = 0 হয় তবে পরবর্তী সন্নিবেশে স্বয়ংক্রিয় বৃদ্ধি ক্ষেত্রের মান 1 থাকবে
যদি সংখ্যা = 101 তবে পরের সন্নিবেশে অটো বর্ধন ক্ষেত্রের মান 102 থাকবে
কিছু অতিরিক্ত তথ্য ... আপনার জন্য দরকারী হতে পারে উপরের ক্যোয়ারীতে
স্বতঃবৃদ্ধি দেওয়ার আগে number
, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার বিদ্যমান টেবিলের স্বতঃবৃদ্ধি কলামে এর চেয়ে কম মান রয়েছে number
।
একটি সারণী (টেবিল 1) থেকে একটি কলামের (কলামের নাম) সর্বাধিক মান পেতে, আপনি নিম্নলিখিত কোয়েরিটি ব্যবহার করতে পারেন
SELECT MAX(column_name) FROM table1
আধা বোকা-প্রমাণ:
declare @max int;
select @max = max(key) from table;
dbcc checkident(table,reseed,@max)
http://sqlserverplanet.com/tsql/using-dbcc-checkident-to-reseed-a-table-after-delete
আপনি যদি মাইএসকিউএল ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন:
ALTER TABLE tablename AUTO_INCREMENT = 1
একটি ডাটাবেসে সমস্ত সারণী মুছুন এবং পুনরায় গবেষণা করুন।
USE [DatabaseName]
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" -- Disable All the constraints
EXEC sp_MSForEachTable "DELETE FROM ?" -- Delete All the Table data
Exec sp_MSforeachtable 'DBCC CHECKIDENT(''?'', RESEED, 0)' -- Reseed All the table to 0
Exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" -- Enable All the constraints back
-- You may ignore the errors that shows the table without Auto increment field.
গ্রহণযোগ্য উত্তরের ভিত্তিতে, যারা সম্পূর্ণ স্কিমা যোগ্যতার সাথে একই ধরণের সমস্যার মুখোমুখি হয়েছেন:
( [MyDataBase].[MySchemaName].[MyTable]
) ... একটি ত্রুটির ফলস্বরূপ, আপনাকে সেই ডিবি প্রসঙ্গে থাকতে হবে
এটি হল, নিম্নলিখিতটি একটি ত্রুটি ফেলে দেবে:
DBCC CHECKIDENT ([MyDataBase].[MySchemaName].[MyTable], RESEED, 0)
পরিবর্তে একক উদ্ধৃতি সহ পুরো-যোগ্যতাসম্পন্ন টেবিলের নামটি বন্ধ করুন:
DBCC CHECKIDENT ('[MyDataBase].[MySchemaName].[MyTable]', RESEED, 0)
বেশ কয়েকটি উত্তর একটি বিবৃতি এই জাতীয় কিছু ব্যবহার করার পরামর্শ দেয়:
DBCC CHECKIDENT (mytable, RESEED, 0)
তবে ওপি "কিছু রেকর্ড মুছে ফেলেছে" বলেছে, যা সেগুলি সবই নাও হতে পারে, সুতরাং 0 এর মান সর্বদা সঠিক হয় না। আর একটি উত্তর স্বয়ংক্রিয়ভাবে সর্বাধিক বর্তমান মান সন্ধান করার এবং সেটির পুনরায় গবেষণা করার পরামর্শ দেয়, তবে টেবিলে কোনও রেকর্ড না থাকলে এটি সমস্যার মধ্যে চলে যায় এবং সর্বাধিক () NULL ফিরিয়ে দেবে। একটি মন্তব্য সহজভাবে ব্যবহার করার পরামর্শ দেওয়া হয়েছে
DBCC CHECKIDENT (mytable)
মানটি পুনরায় সেট করতে, তবে অন্য একটি মন্তব্য সঠিকভাবে জানিয়েছে যে এটি কেবলমাত্র টেবিলে ইতিমধ্যে সর্বাধিকের তুলনায় মূল্য বৃদ্ধি করে; টেবিলের সর্বাধিকের চেয়ে ইতিমধ্যে যদি ওপরে এটি করতে চেয়েছিল তবে মানটি হ্রাস করবে না।
একটি ভাল সমাধান এই ধারণাগুলি একত্রিত করে। প্রথম CHECKIDENT মানটি 0 তে পুনরায় সেট করে, এবং দ্বিতীয়টি বর্তমানে সারণীতে সর্বাধিক মানটিতে পুনরায় সেট করে, যদি সারণীতে রেকর্ড রয়েছে:
DBCC CHECKIDENT (mytable, RESEED, 0)
DBCC CHECKIDENT (mytable)
যেমন একাধিক মন্তব্য ইঙ্গিত করেছে, মুছে ফেলা রেকর্ডগুলির দিকে ইশারা করে অন্য টেবিলগুলিতে কোনও বিদেশী কী নেই তা নিশ্চিত করুন। অন্যথায় এই বিদেশী কীগুলি আপনি সারণীটি পুনর্বিবেচনা করার পরে তৈরি করা রেকর্ডগুলিকে নির্দেশ করবে, যা আপনার মনের মনে প্রায় ছিল না।
আমি এই উত্তরটি যুক্ত করতে চাই কারণ DBCC CHECKIDENT
যখন আপনি টেবিলগুলির জন্য স্কিমা ব্যবহার করেন তখন -প্রয়োগটি সমস্যার সম্মুখীন হবে। নিশ্চিত হতে এটি ব্যবহার করুন:
DECLARE @Table AS NVARCHAR(500) = 'myschema.mytable';
DBCC CHECKIDENT (@Table, RESEED, 0);
আপনি যদি অপারেশনটির সাফল্য পরীক্ষা করতে চান তবে ব্যবহার করুন
SELECT IDENT_CURRENT(@Table);
যা 0
উপরের উদাহরণে আউটপুট করা উচিত ।
আপনি সাধারণভাবে এটি করতে চান না। পুনরায় গবেষণা ডেটা অখণ্ডতা সমস্যা তৈরি করতে পারে। এটি কেবলমাত্র এমন ডেভলপমেন্ট সিস্টেমে ব্যবহারের জন্য যেখানে আপনি সমস্ত পরীক্ষার ডেটা মুছে ফেলছেন এবং আবার শুরু করবেন। সম্পর্কিত সমস্ত রেকর্ড মুছে ফেলা না হলে (কোনও বিদেশী কী সম্পর্কের মধ্যে থাকা প্রতিটি টেবিলটি নয়!) এর ক্ষেত্রে এটি একটি উত্পাদন সিস্টেমে ব্যবহার করা উচিত নয়) আপনি এটি করে কোনও বিশৃঙ্খলা তৈরি করতে পারেন এবং বিশেষ করে যদি আপনি প্রতিটি মুছার পরে নিয়মিত ভিত্তিতে এটি করতে চান। আপনার পরিচয় ক্ষেত্রের মানগুলির মধ্যে ফাঁকগুলি নিয়ে চিন্তা করা খারাপ ধারণা।
এই সম্পর্কে কি?
ALTER TABLE `table_name`
MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
এটি স্বয়ংক্রিয় বৃদ্ধি 0 বা যে কোনও সংখ্যায় যা চান তাতে পরিবর্তন করার জন্য একটি দ্রুত এবং সহজ উপায়। আমি এটি একটি ডেটাবেস রফতানি করে এবং কোডটি নিজে পড়ে দেখেছি।
এটিকে একটি একক-লাইন সমাধান তৈরি করতে আপনি এটি এ জাতীয়ভাবে লিখতে পারেন:
ALTER TABLE `table_name` MODIFY `id` int(12) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;