הוספת עמודה עם ערכת זהות

עודכן דף :
תאריך יצירת דף :

SQL Server כולל מאפיין "IDENTITY" שמגדיר באופן אוטומטי את המספר הרציף מ- 1 לעמודה ספציפית בעת הוספת רשומה. לדוגמה, אם תגדיר את IDENTITY בעמודה A ותוסיף 3 רשומות, עמודה A תאוכלס באופן אוטומטי בערכים של 1, 2 ו- 3 בסדר שבו הוספת אותם.

גם אם אתה משתמש במשפט INSERT, הערך מוגדר באופן אוטומטי, ולכן אין צורך להגדיר במפורש את הערך, אבל אני חושב שיש מקרים שבהם אתה רוצה להגדיר את הערך במפורש כי הוא משמש עבור מפתח זר וכו '.

לדוגמה, נניח שיש טבלה עם המאפיין "זהות" שנקבע בעמודה "ID" כפי שמוצג באיור.

משפט INSERT המוסיף ערך לטבלה זו, כולל עמודת המזהה, ייראה כך:

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

עם זאת, כאשר אני מנסה להפעיל אותו, אני חושב שהשגיאה הבאה תופיע.

Msg 544, רמה 16, מדינה 1, קו 1 כאשר IDENTITY_INSERT מוגדר ככיבוי, לא ניתן להוסיף ערכים מפורשים לעמודת הזהות של הטבלה 'XXXXX'.

ההנחה היא שעמודות שהוגדרו במקור כ-IDENTITY מוגדרות באופן אוטומטי כערכים, כך שלא ניתן להגדיר במפורש את הערכים.

אם אתה באמת רוצה להגדיר את זה, אתה צריך להגדיר "IDENTITY_INSERT" כדי "מופעל" כמתואר בהודעת השגיאה. הפעל את IDENTITY_INSERT לפני ההוספה וחזור למצב כבוי כאשר ההוספה הושלמה, כמו ב- SQL הבא:

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

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

כעת באפשרותך להגדיר במפורש את הערך ולהוסיף אותו. INSERT-SELECT באמצעות טבלאות הוא גם חוקי.

עמודות עם IDENTITY מוקצות באופן אוטומטי לערכים מ- 1, אך אם תגדיר במפורש את הערכים כמתואר לעיל, ייתכן שאתה תוהה איזה מספר יוקצה בהמשך. במקרה זה, הערך הבא שהוקצה מוקצה מהמספר לאחר הערך המוסף הגבוה ביותר שהוצמד לטבלה, כך שאין ערך כפול כאשר מוסיפים רשומה חדשה. (עם זאת, ישנם חריגים בשל נכויות וכו').