درج ستون با مجموعه هویت

صفحه به روز شده :
تاریخ ایجاد صفحه :

SQL Server دارای یک ویژگی "IDENTITY" است که به طور خودکار شماره دنباله دار را از ۱ به یک ستون خاص در هنگام اضافه کردن یک رکورد تنظیم می کند. به عنوان مثال، اگر هویت را در ستون A تنظیم کنید و 3 رکورد اضافه کنید، ستون A به طور خودکار با مقادیر 1، 2 و 3 به ترتیبی که آنها را اضافه کرده ایید، جمعیت دارد.

حتی اگر از یک بیانیه INSERT استفاده کنید، مقدار به طور خودکار تنظیم شده است، بنابراین نیازی به تنظیم صریح ارزش نیست، اما من فکر می کنم مواردی وجود دارد که شما می خواهید ارزش را به صراحت تنظیم کنید زیرا برای یک کلید خارجی و غیره استفاده می شود.

به عنوان مثال، فرض کنید جدولی با مجموعه اموال "IDENTITY" در ستون "ID" همان طور که در شکل نشان داده شده وجود دارد.

یک بیانیه INSERT که مقداری را در این جدول درج می کند، از جمله ستون ID، این شکلی خواهد بود:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

با این حال، وقتی سعی می کنم آن را اجرا کنم، فکر می کنم خطای زیر ظاهر خواهد شد.

Msg 544, سطح 16, دولت 1, خط 1 هنگامی IDENTITY_INSERT به OFF تنظیم می شود، مقادیر صریح را نمی توان در ستون هویت جدول 'XXXXX' درج کرد.

ستون هایی که در اصل بر روی IDENTITY تنظیم شده اند فرض می شوند که مقادیر به صورت خودکار تنظیم شده اند، بنابراین شما نمی توانید به صراحت مقادیر را تنظیم کنید.

اگر واقعا می خواهید آن را تنظیم کنید، باید "IDENTITY_INSERT" را به "ON" همان طور که در پیام خطا شرح داده شده است، تنظیم کنید. روشن IDENTITY_INSERT قبل از قرار دادن، و بازگشت به خاموش زمانی که درج کامل است، به عنوان در SQL زیر:

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

شما هم اکنون می توانید به صراحت مقدار را تنظیم کنید و آن را درج کنید. INSERT-SELECT با استفاده از جداول نیز معتبر است.

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