إنشاء معرفات الزيادة التلقائية في SQL Server 2005 بدون ORDER BY
الحاجة إلى إدراج البيانات من جدول إلى آخر أثناء الزيادة التلقائية يمكن أن يشكل عمود غير الهوية تحديًا. يتضمن الأسلوب القياسي استخدام المؤشر أو إنشاء متغير جدول، ولكن هذا يمكن أن يكون غير فعال.
في حالة عدم وجود حقل ORDER BY شرعي، يمكن استخدام الدالة ROW_NUMBER. ومع ذلك، فإن غياب ترتيب صريح لا يضمن الحفاظ على ترتيب البيانات الأصلي. وذلك لأن "غير مرتب" يختلف عن "الاحتفاظ بالترتيب الأصلي".
لمعالجة هذه المشكلة، يتضمن الحل تجنب الطلب الصريح كما يلي:
INSERT dbo.TargetTable (ID, FIELD) SELECT Row_Number() OVER (ORDER BY (SELECT 1)) Coalesce( (SELECT Max(ID) FROM dbo.TargetTable WITH (TABLOCKX, HOLDLOCK)), 0 ), FieldValue FROM dbo.SourceTable WHERE {somecondition};
يقوم هذا الأسلوب بحساب الحد الأقصى للمعرف وإدراج البيانات أثناء الحصول على الأقفال لتجنب أخطاء التزامن.
ومع ذلك، لاحظ أنه يوصى بشدة باستخدام عمود الهوية لأنه يلغي الحاجة للقفل ويضمن التزامن الأمثل. توفر أعمدة الهوية حلاً أكثر كفاءة وقوة للمعرفات المتزايدة تلقائيًا في SQL Server.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3