এসকিউএল সার্ভার ম্যানেজমেন্ট স্টুডিও ২০১২-এ অটো ইনক্রিমেন্ট প্রাথমিক কী


447

আমি কিভাবে করবো একটি ডাটাবেস সারণি, আমি ফোরামে মাধ্যমে দেখে ফেলেছে কিন্তু কিভাবে পারবেন না।auto incrementprimary keySQL Server

আমি বৈশিষ্ট্যগুলি দেখেছি কিন্তু একটি বিকল্প দেখতে পাচ্ছি না, আমি একটি উত্তর দেখেছি যেখানে আপনি Identityস্পেসিফিকেশন সম্পত্তিটিতে যান এবং এটি হ্যাঁ সেট করে Identity incrementএবং 1 সেট করে দিয়েছেন, তবে এই বিভাগটি ধূসর হয়ে গেছে এবং আমি পরিবর্তন করতে পারি না হ্যাঁ না।

এটি করার একটি সহজ উপায় থাকতে হবে তবে আমি এটি খুঁজে পাচ্ছি না।


5
কী কলামের ডেটাটাইপ অন্তর্নিহিত?
রাব

1
@ কোড এডি করুন তার বর্তমানের সেটটিকে চর হিসাবে চিহ্নিত করুন (10) তবে আমি যেমন অনুশীলন করছি ঠিক তেমন পরিবর্তন করতে পারি, ধন্যবাদ
লেজমোনকি

উত্তর:


704

নিশ্চিত হোন যে কী কলামের ডেটাটাইপটি intইমেজ শো হিসাবে ম্যানুয়ালি পরিচয় সেট করবে

এখানে চিত্র বর্ণনা লিখুন

অথবা কেবল এই কোডটি চালান

-- ID is the name of the  [to be] identity column
ALTER TABLE [yourTable] DROP COLUMN ID 
ALTER TABLE [yourTable] ADD ID INT IDENTITY(1,1)

কোডটি চলবে, যদি IDটেবিলের একমাত্র কলাম না হয়

চিত্র রেফারেন্স ফিফো এর


21
শুধু সংশোধন একটি বিট: IDENTITYসম্পত্তি কোনো সাংখ্যিক ধরনের তথ্য প্রয়োগ করা যেতে পারে (তাই এটা হতে পারে tinyint, smallint, int, bigint, numeric, decimal), শুধুমাত্র বাধ্যতা এটি ভগ্ন সংখ্যা প্রতিনিধিত্ব করতে পারেনি (তাই এটা হতে পারে না float বা real, তন্ন তন্ন numericবা decimal অ-শূন্য স্কেল সহ ) এবং ofc সহ, পরিচয় নির্দিষ্টকরণটি নির্বাচিত ডেটা ধরণের সাথে সামঞ্জস্য করা উচিত।
মাস

2
কাজের, কোনও বিদেশী কী ইত্যাদি সরবরাহ করে নয়
অ্যান্ড্রু ডে

3
আমি কেবল যুক্ত করতে চেয়েছিলাম, যদি আপনি ইতিমধ্যে আপনার পরিচয় কলামে একটি ডিফল্ট মান সেট করে থাকেন তবে (এটি পরিচয়টি) ধূসর। ডিফল্ট মানটি সরান, এবং এটি আবার উপলব্ধ হয়।
সিডিস্পেস

7
আপনি যদি মানগুলি সংশোধন করতে না পারেন তবে সরঞ্জাম-বিকল্পগুলি-ডিজাইনারগুলিতে যান এবং "পুনর্নির্মাণের জন্য প্রয়োজনীয় পরিবর্তনগুলি সংরক্ষণ করা" রোধ করুন বিকল্পটি চেক করুন।
জৌমে

185

আপনি যখন টেবিলটি তৈরি করছেন, আপনি নীচে নীচে একটি IDENTITYকলাম তৈরি করতে পারেন :

CREATE TABLE (
  ID_column INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  ...
);

IDENTITYসম্পত্তি উইল স্বয়ংক্রিয় বৃদ্ধি থেকে সংখ্যা 1. কলাম আপ (নোট যে কলামের ডাটা টাইপ একটি পূর্ণসংখ্যা হতে হয়েছে।) আপনি যদি একটি বিদ্যমান কলামে এই অ্যাড করতে চান তাহলে, একটি ব্যবহার ALTER TABLEকমান্ড।

সম্পাদনা:
কিছুটা পরীক্ষা করা হয়েছে, এবং আমি বিভিন্ন সারণির জন্য কলাম প্রপার্টি উইন্ডোর মাধ্যমে পরিচয় বৈশিষ্ট্যগুলি পরিবর্তন করার কোনও উপায় খুঁজে পাচ্ছি না। আমার ধারণা আপনি যদি কোনও কলামকে একটি পরিচয় কলাম করতে চান তবে আপনার একটি ALTER TABLEকমান্ড ব্যবহার করা উচিত ।


আহ, এটি বিশেষত এসকিউএল সার্ভার ২০০৮ আর 2 এর জন্য - কিছু মনে করবেন না।
জোসিয়েন

2
এই তৈরি টেবিল সিনট্যাক্সটি ভাল অনুশীলন হিসাবে মন্তব্যগুলিতে এই পোস্টের লেখক পরামর্শ দিয়েছেন , আশা কাউকে সহায়তা করে।
শাইজুট

88

বর্ধিতকরণ এবং বীজ প্রকাশ করতে আপনাকে পরিচয় বিভাগটি প্রসারিত করতে হবে।

এখানে চিত্র বর্ণনা লিখুন

সম্পাদনা: আমি ধরে নিয়েছি যে আপনার একটি পূর্ণসংখ্যার ডেটাটাইপ হবে, না চর (10)। কোনটি যুক্তিযুক্ত আমি বলি এবং বৈধ আমি যখন এই উত্তর পোস্ট করি


2
এটি yesহ'ল ধূসর হয়ে উঠেছে char(10)(কেবল পোস্ট করা মন্তব্য থেকে)
মার্টিন স্মিথ

@ মার্টিন স্মিথ হ্যাঁ এটিকে সাধারণ সমস্যা বলে মনে হচ্ছে, আমি এটি পরিবর্তন করতে যাচ্ছি এবং পরীক্ষার জন্য অনেক ধন্যবাদ
লেজমোনকি

একটি নতুন টেবিল তৈরি করার সময় আমি ব্যবহার করেছি BookID int primary key identityআমি বীজ এবং বৃদ্ধি উভয়ই নির্দিষ্ট করে নি, এটি কি ভাল অনুশীলন? কারণ আমি এমএসডিএন-তে ডকুমেন্টেশন দেখি না যদি উভয়ই নির্দিষ্ট না করা হয়, তবে ডিফল্টটি (1,1) হয়।
শাইজুত

40

আপনার ডাটাবেসটি প্রসারিত করুন, আপনার টেবিলটিতে ডান ক্লিক করুন এবং ড্রপডাউন থেকে নকশা নির্বাচন করুন tableITLoks এটি পছন্দ করে

এখন এর নীচে কলামের বৈশিষ্ট্যগুলিতে যান নীচে স্ক্রোল করুন এবং সনাক্তকরণের নির্দিষ্টকরণটি সন্ধান করুন , এটি প্রসারিত করুন এবং আপনি খুঁজে পাবেন এটি পরিচয় হ্যাঁ এটি তৈরি করে make এখন এটির নীচে পরিচয় বৃদ্ধি বেছে নিন আপনি এতে যে পরিমাণটি বৃদ্ধি করতে চান তার মান দিন। এখানে চিত্র বর্ণনা লিখুন


1
এটি আমার কাছে সঠিক উত্তর বলে মনে হচ্ছে, কেবল ডেটা টাইপ করে কোন প্রকারের কৌশলটি করবে না, তাই না?
ড্রিউদ্দিন

10

সম্ভবত আমি কিছু মিস করছি তবে কেন এটি SEQUENCE অবজেক্টের সাথে কাজ করে না? এটি কি আপনি খুঁজছেন না?

উদাহরণ:

CREATE SCHEMA blah.
GO

CREATE SEQUENCE blah.blahsequence
START WITH 1
INCREMENT BY 1
NO CYCLE;

CREATE TABLE blah.de_blah_blah
(numbers bigint PRIMARY KEY NOT NULL
......etc

স্কোয়ারটি উল্লেখ করার সময় একটি INSERT কমান্ডটি কেবল ব্যবহার করুন:

NEXT VALUE FOR blah.blahsequence

SEQUENCE এর জন্য আরও তথ্য এবং বিকল্পগুলি


এই সমাধান কারণ, আপনি যদি ঢোকানো সারির সময় অর্ডার যত্নশীল সঠিক অন্যতম IDENTITYকখনও কখনও ফাঁক রেখে জাম্প তারপর এটি ফিরে এসেছে সেই ফাঁক আবার ভরাট। সুতরাং IDENTITYসর্বদা incrmenet অবস্থার গ্যারান্টি দেয় না
FindOut_Quran

1
@ মার্টিন স্মিথ উফ, লিঙ্কটি অনুসরণ করেননি, আমার ভুল! আমি এমএস-এসকিউএলটির নির্দিষ্ট বৈশিষ্ট্য না থাকার এতটাই অভ্যস্ত হয়ে পড়েছি যে আমি মাঝে মাঝে ভুলে যাই যে আরও নতুন সংস্করণ রয়েছে যা আরও স্টাফ সমর্থন করে। আমি আমার মন্তব্যটি মুছে ফেলব কারণ এটি বিভ্রান্তিকর হতে পারে ... যদি আরও সাধারণভাবে প্রকাশ করা হয় তবে এটি বৈধ থাকবে: হতে পারে যে তিনি কোনও আরডিবিএমএস মেক / সংস্করণ ব্যবহার করছেন যা সিকোয়েন্স অবজেক্টগুলিকে সমর্থন করে না - বিশেষত যেহেতু প্রশ্নটি কেবল একটি জিজ্ঞাসা করা হয়েছিল এসকিউএল সার্ভার 2012 প্রকাশের কয়েক মাস পরে;)
পল গ্রোক

1
@FindOut_Quran আপনি কি নিশ্চিত যে আইডেন্টিটি কলামে শূন্যস্থান পূরণ হয়েছে? আমি কেবল এসকিউএল সার্ভার 2005 এর সাথে কাজ করেছি যেখানে আমি কখনই এমনটি দেখিনি - ফাঁকগুলি কেবল রয়ে গেছে। এবং এটি আরডিবিএমএসে ঘটতে দেখে আমি অবাক হয়ে যাব কারণ এ জাতীয় বৈশিষ্ট্যটি "ফ্রি নন" (পারফরম্যান্স-ওয়াইজ) এবং "আকাঙ্ক্ষিত নয়" (কমপক্ষে বেশিরভাগ অ্যাপ্লিকেশনগুলিতে) এর এক বিস্ময়কর সমন্বয় হবে।
পল গ্রোক

@ পলগ্রোক হ্যাঁ আমি নিশ্চিত। 1000 সারি সন্নিবেশ করানোর জন্য আপনি কোনও লেনদেন ব্যবহার করার চেষ্টা করতে পারেন, তারপরে রোলব্যাক করুন। পরিচয়ের মানটি লাফিয়ে উঠবে। আরও হাজার হাজার সারি sertোকানোর চেষ্টা করুন এবং / অথবা রোলব্যাক কমিট করুন। আপনি এটি মাঝে মাঝে শূন্যস্থান পূরণ করতে ব্যাক করতে লক্ষ্য করবেন
FindOut_Quran

@ ফিনডআউট_কিউরান আমি কীভাবে এটি ঘটতে পারে তা দেখতে পাচ্ছি না। এমএস এসকিউএল আইডেন্টিটি কলামগুলিতে একটি সাধারণ কাউন্টার ব্যবহার করা হয় যা ব্যবহারকারীর দ্বারা নির্ধারিত মান অনুসারে তৈরি হয় এবং তারপরে ব্যবহারকারী-নির্ধারিত মান দ্বারা বর্ধিত হয়। এমনকি আপনি কাউন্টারটি জিজ্ঞাসা করতে এবং পুনরায় সেট করতে পারেন। একমাত্র উপায় আমি এই ঘটনাকে দেখতে পাচ্ছি যখন সমবর্তী লেনদেনগুলি "অর্ডার অফ আউট" করে। অর্থ্যাৎ লেনদেন যা আইডেন্টিটি কাউন্টারটিকে প্রথমে ধাক্কা দিচ্ছিল অন্য লেনদেনের পরে কমিট করে । সেক্ষেত্রে আপনার একটি স্বল্প-সময়ের ব্যবধান থাকবে যা পরে পূর্ণ হবে। যা সংঘর্ষ এড়ানোর জন্য প্রয়োজনীয়। পরিচয়ের কাউন্টারটি যদিও কখনও পিছনে লাফাতে পারে না।
পল গ্রোক

7

আপনি যখন ডেটা প্রকার: int ব্যবহার করছেন তখন আপনি যে সারিটি স্বয়ংসোধক হতে চান তা নির্বাচন করতে এবং কলামের বৈশিষ্ট্যে যেতে পারেন। সেখানে আপনি পরিচয়টি 'হ্যাঁ' তে সেট করতে পারেন। স্বতঃসিদ্ধকরণের জন্য প্রারম্ভিক মানটি সেখানে সম্পাদনা করা যায়। আশা করি আমি সাহায্য করতে পারি;)


কলামের বৈশিষ্ট্য কোথায় অবস্থিত?

2

আমার এই সমস্যাটি ছিল যেখানে আমি ইতিমধ্যে টেবিলটি তৈরি করেছিলাম এবং টেবিলটি না ফেলে পরিবর্তন করতে পারিনি আমি যা করলাম তা হ'ল: (তারা কখন এটি বাস্তবায়িত করেছিল তবে এসকিউএল ২০১ 2016-এ এটি ছিল কিনা তা নিশ্চিত নয়)

অবজেক্ট এক্সপ্লোরারের টেবিলে ডান ক্লিক করুন:

Script Table as > DROP And CREATE To > New Query Editor Window

তারপরে জোসিয়ানের কথায় স্ক্রিপ্টটি সম্পাদনা করুন; নীচে যেখানে স্ক্রোল করুন সেখানে CREATE TABLEআপনার প্রাথমিক কীটি সন্ধান করুন এবং কমাটির IDENTITY(1,1)আগে শেষে যুক্ত করুন । স্ক্রিপ্ট চালান।

এই ইস্যুটির কারণে আমার জন্য ড্রপ এবং ক্রিপ্ট স্ক্রিপ্টও সহায়ক ছিল (যা উত্পন্ন স্ক্রিপ্ট পরিচালনা করে))


1

আপনি যদি আইডি উপাদানগুলিকে সংমিশ্রিত করতে চান তবে যেমন যত্নবান হন। এসকিউএলএসএভারভার আইডিটি 1000 দিয়ে লাফিয়ে উঠতে পারে।

পরীক্ষা: পুনরায় চালু করার আগে আইডি = 11 পুনরায় শুরু করার আগে, আপনি টেবিলে নতুন সারিটি সন্নিবেশ করুন, তারপরে আইডিটি 1012 হবে।


1

আপনি সারণি তৈরি করার সময় সীমাবদ্ধতার IDENTITYপাশাপাশি কলামে ডেটা টাইপ হিসাবে কীওয়ার্ডটি ব্যবহার করতে পারেন PRIMARY KEY
উদা:

StudentNumber IDENTITY(1,1) PRIMARY KEY

এখানে প্রথম '1' অর্থ শুরুর মান এবং দ্বিতীয় '1' হ'ল ইনক্রিমেন্টিং মান।


1
CREATE TABLE Persons (
    Personid int IDENTITY(1,1) PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

এমএস এসকিউএল সার্ভার একটি স্বতঃবৃদ্ধি বৈশিষ্ট্য সম্পাদন করতে পরিচয় কীওয়ার্ডটি ব্যবহার করে।

উপরের উদাহরণে আইডেন্টিটিটির জন্য প্রারম্ভিক মানটি 1 এবং প্রতিটি নতুন রেকর্ডের জন্য এটি 1 দ্বারা বৃদ্ধি পাবে।

টিপ: "ব্যক্তিগতকৃত" কলামটি 10 ​​মান থেকে শুরু হওয়া উচিত এবং 5 দ্বারা বৃদ্ধি হওয়া উচিত তা নির্দিষ্ট করতে, এটি পরিচয় (10,5) এ পরিবর্তন করুন।

"ব্যক্তি" টেবিলটিতে একটি নতুন রেকর্ড সন্নিবেশ করতে, আমাদের "ব্যক্তিগত" কলামটির জন্য কোনও মান নির্দিষ্ট করতে হবে না (একটি অনন্য মান স্বয়ংক্রিয়ভাবে যুক্ত হবে):


0

যদি টেবিলটি ইতিমধ্যে জনবসতিযুক্ত থাকে তবে কলামটি আইডেন্টিটি কলামে পরিবর্তন করা বা এটি পরিচয় নন কলামে রূপান্তর করা সম্ভব নয়। আপনাকে সমস্ত ডেটা রফতানি করতে হবে তারপরে আপনি কলামের ধরণ আইডেন্টিটি বা তার বিপরীতে পরিবর্তন করতে পারেন এবং তারপরে ডেটা আমদানি করতে পারেন। আমি জানি এটি বেদনাদায়ক প্রক্রিয়া তবে আমি বিশ্বাস করি যে এই পোস্টে উল্লিখিত সিক্যুয়েন্স ব্যবহার করা ছাড়া বিকল্প নেই।


1
আপনি ALTER TABLE ... SWITCHকোনও তথ্য স্পর্শ না করে কেবল মেটাডেটা স্যুইচ করতে ব্যবহার করতে পারেন । উদাহরণস্বরূপ দেখুন কোনও ডেটা ক্ষতি ছাড়াই কোনও টেবিল তৈরির পরে কীভাবে অটো ইনক্রিমেন্ট সেট করবেন?
মার্টিন স্মিথ

1
আপনার প্রদত্ত লিঙ্কে উল্লিখিত প্রক্রিয়াটিতে ডেটা টেম্প টেবিল এবং পিছনে স্থানান্তর করা জড়িত যা আমার আমার বক্তব্যের সাথে একমত নয়। আমি যদি ভুল হয় তবে দয়া করে আমাকে একটি কাজের উদাহরণ দিন।
সফটেক

1
লিঙ্কটিতে একটি কার্যকারী উদাহরণ রয়েছে। কোনও "টেম্প টেবিল এবং পিছনে ডেটা স্থানান্তর করা" নেই। `অলটার টেবিলে ... সুইচ হ'ল কেবল একটি মেটাডেটা পরিবর্তন। এটি কোনও ডেটা সরায় না।
মার্টিন স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.