خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را

استفاده از ویژگی IDENTITY د SQL Server

استفاده از ویژگی IDENTITY د SQL Server

کد مطلب : 9087


هنگامی که از T-SQL برای ایجاد (یا تغییر) جدول در SQL Server استفاده می کنید ، ویژگی IDENTITY برای ایجاد یک ستون ID یا ستون هویتی را در اختیار دارید(البته بصورت عادی هم جدول ایجاد می کنید چنین امکانی دارید).

آموزش سالیدورکز 20-2019
ستون identity در واقع یک ستون با شماره شناسایی و در حال افزایش بصورت خودکار است. از ویژگی IDENTITY می توان با دستورات CREATE TABLE و ALTER TABLE استفاده کرد.
Syntax استفاده از ویژگی IDENTITY به فرم زیر می باشد:

IDENTITY [ (seed , increment) ]

Seed در واقع شروع تخصیص شماره شناسه Uniqe بوده و increment مقداری که بر حسب آن عدد identity افزایش می باشد. برای استفاده یا باید هیچ کدام را مقداردهی نکنید و یا باید هر دوی آنها را مقداردهی کنید. اگر هیچکدام از آنها را مقداردهی نکنید ، پیش فرض (1،1) خواهد بود.
لطفا به مثال زیر که یک جدول ایجاد می کند، دقت کنید:

CREATE TABLE Pets (
PetId int IDENTITY(1,1) PRIMARY KEY,
PetName varchar(255)
);

در اسکریپت فوق یک جدول با دو ستون ایجاد شد. ستون اول (PetId) یک ستون identity است زیرا در تعریف آن از ویژگی IDENTITY استفاده شده است.
اکنون که یک ستون identity داریم و می توان نام حیوانات خانگی را در ستون PetName وارد کرده بدون اینکه نیازی به درج شناسه برای هر سطر وجود داشته باشد چون بصورت اتوماتیک تولید می شود. شروع آن از عدد 1 بوده و مقداری افزایشی آن به ترتیب 1 خواهد بود.
در اسکریپت زیر، مقادیری را به جدول مذکور اضافه می کنیم:

INSERT INTO Pets (PetName)
VALUES ('Homer'), ('Felix'), ('Ruff');

SELECT * FROM Pet;

+---------+-----------+
| PetId | PetName |
|---------+-----------|
| 1 | Homer |
| 2 | Felix |
| 3 | Ruff |
+---------+-----------+

Different Seed and Increment

در این مثال از seed و Increment متفاوتی استفاده می کنیم. مثلا Seed از 150 شروع و بصورت 10 تایی افزایش خواهد یافت.

CREATE TABLE Cities (
CityId int IDENTITY(150, 10) PRIMARY KEY,
CityName varchar(255)
);

حالا تعدادی رکورد به این جدول اضافه می کنیم:

INSERT INTO Cities (CityName)
VALUES ('Auckland'), ('Danang'), ('Khon Kaen');

SELECT * FROM Cities;

خروجی زیر با Select جدول مشاهده خواهید کرد:

+----------+------------+
| CityId | CityName |
|----------+------------|
| 150 | Auckland |
| 160 | Danang |
| 170 | Khon Kaen |
+----------+------------+

Incorrect Usage

همانطور که پیشتر هم توضیح داده شد، شما یا باید هر دو پارامتر IDENTITY را مقداردهی کنید و یا به همان حالت پیشفرض آن را رها کرده و مقداردهی انجام ندهید. در مثال زیر فقط یکی از دو پارامتر مقدار دهی شده و بدیهی است که هنگا اجرا کد، خطا رخ خواهد داد:

CREATE TABLE Cities (
CityId int IDENTITY(1) PRIMARY KEY,
CityName varchar(255)
);

خروجی دستور:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near ')'.

Trying to Override the Identity Values

اگر درصدد مقدار دهی به ستون های identity باشید، با خطا مواجه می شوید چرا که مقادیر ستون identity بصورت خودکار توسط SQL Server تولید می شود.

INSERT INTO Cities (CityId, CityName)
VALUES (123, 'Bangkok');

خروجی دستور فوق چیزی شبیه به خطای زیر خواهد بود:

Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'Cities' when IDENTITY_INSERT is set to OFF.

در این شرایط باید ستونی که در دستور insert وارد کرده اید را پاک کنید. دستور اصلاح شده فوق به صورت زیر، به درستی کار خواهد کرد:

INSERT INTO Cities (CityName)
VALUES ('Bangkok');

SELECT * FROM Cities;

خروجی کوئری فوق به صورت زیر خواهد بود:

+----------+------------+
| CityId | CityName |
|----------+------------|
| 150 | Auckland |
| 160 | Danang |
| 170 | Khon Kaen |
| 180 | Bangkok |
+----------+------------+



دیدگاه ها(0)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.

لطفا پیش از ارسال دیدگاه ، به نکات زیر توجه فرمایید :

- از نوشتن دیدگاه های غیر مرتبط با پست جدا خودداری کنید.
- لطفاً دیدگاه های خود را با حروف فارسی تایپ کنید، دیدگاه های فینگیلیش تایید نمی شوند.
- قبل از ارسال دیدگاه حتما متن پست و نظرات سایر دوستان را بخوانید . نظرات اسپم و تکراری تایید نخواهند شد.
- نظر شما ممکن است بدون پاسخ تایید شوند که در این صورت باید منتظر پاسخ از سوی دیگر کاربران باشید .
- لطفا انتقادات و پیشنهادات و همچنین درخواست های خود را از طریق ایمیل khoshamoz[at].hotmail.com ارسال نمایید
- چرا آموزش های سایت خوش آموز در قالب فایل pdf به صورت یکجا ارائه نمی شوند؟
- چرا برخی پرسش های کاربران پاسخ داده نمی شوند؟

آموزش های رایگان خوش آموز