درج مقدار دلخواه در ستونی از نوع identity
 
   SQL Server
   ۱۶۷۱۳
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۸۹/۱۰/۹
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

چگونه می توان مقدار IDENTITY دلخواه را در جدول درج کرد

ستون هایی که دارای خصیصه IDENTITY هستند بطور اتوماتیک بر اساس Increment و Current Seed مقدار دهی می شوند. بطور پیش فرض امکان insert کردن مقداری صریح برای اینگونه ستون ها وجود ندارد. فرض کنید می خواهید یک فضای Gap مصنوعی بین Seed فعلی و Seed مورد نظر ایجاد کنید. در این زمان با دستور IDENTITY_INSERT ON اینکار صورت می گیرد. قبل از هر چیز یک جدول موقت ایجاد می کنیم:

CREATE TABLE #a(i INT IDENTITY(1,1), j INT)

ابتدا برای اینکه ببینیم چه پیغام خطایی هنگام درج مستقیم مقدار ستون identity صادر می شود دستور insert زیر را می نویسیم:

INSERT INTO #a (i, j) VALUES(1, 1);

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

همانطور که مشاهده می شود پیغام می گوید زمانی که IDENTITY_INSERT بر روی OFF تنظیم باشد امکان درج صریح مقدار برای ستون identity مقدور نیست. که برای رفع، آن را روی ON تنظیم نموده و پس از دستور درج دوباره آن را به OFF بر می گردانیم.

SET IDENTITY_INSERT #a ON
INSERT INTO #a (i, j) VALUES (10, 1)
SET IDENTITY_INSERT #a OFF

برای اطلاع از Seed فعلی یکی از دستورات زیر را اجرا می کنیم:

DBCC checkident (#a)
SELECT ident_current('#a')

حالا اگر مقدار 5 را در ستون identity درج کنیم Seed فعلی ما چند خواهد بود؟ 5 یا 10؟
Step در اینجا افزایشی است یعنی علامت آن مثبت است. بر همین اساس اگر مقدار identity درج شده از seed فعلی بزرگتر باشد Seed به مقدار جدید بروز خواهد شد در غیر اینصورت Seed ما تغییر نخواهد کرد. پس جواب 10 خواهد بود.