إدراج عمود مع تعيين الهوية
يحتوي SQL Server على خاصية "IDENTITY" التي تقوم تلقائيا بتعيين الرقم المتسلسل من 1 إلى عمود معين عند إضافة سجل. على سبيل المثال، إذا قمت بتعيين IDENTITY في العمود A وإضافة 3 سجلات، تعبئة العمود A تلقائيا بقيم 1 و2 و3 بالترتيب الذي أضفتها به.
حتى إذا كنت تستخدم عبارة INSERT ، تعيين القيمة تلقائيا ، لذلك ليست هناك حاجة لتعيين القيمة صراحة ، ولكن أعتقد أن هناك حالات تريد فيها تعيين القيمة بشكل صريح لأنها تستخدم لمفتاح خارجي وما إلى ذلك.
على سبيل المثال، افترض أن هناك جدولا يحتوي على خاصية "IDENTITY" التي تم تعيينها في عمود "ID" كما هو موضح في الشكل.
ستبدو عبارة INSERT التي تدرج قيمة في هذا الجدول، بما في ذلك عمود المعرف، كما يلي:
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 [テーブル名];
يمكنك الآن تعيين القيمة بشكل صريح وإدراجها. إدراج - تحديد باستخدام الجداول صالح أيضا.
يتم تعيين القيم التي تحتوي على IDENTITY تلقائيا من 1، ولكن إذا قمت بتعيين القيم بشكل صريح كما هو موضح أعلاه، فقد تتساءل عن الرقم الذي سيتم تعيينه بعد ذلك. في هذه الحالة، يتم تعيين القيمة التالية المعينة من الرقم بعد أعلى قيمة مضافة إلى الجدول، لذلك لا توجد قيمة مكررة عند إدراج سجل جديد. (ومع ذلك ، هناك استثناءات بسبب الإعاقات ، وما إلى ذلك)