أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

سلوك الدالة IDENTITY عند استخدامها مع SELECT INTO أو INSERT استعلامات SELECT التي تحتوي على جملة ORDER BY

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية273586
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
عند استخدام استعلام SELECT INTO مع الدالة IDENTITY و جملة ORDER BY لا يتم ضمان قيم التعريف التي يتم إنشاؤها لجعل بنفس الترتيب كما هو الترتيب الذي تم توفيره بواسطة ORDER BY. على سبيل المثال، إذا بدأت الدالة IDENTITY مع الزيادة 1 و زيادة 1, قد يكون الصف الأول في مجموعة النتائج المرتبة قيمة مختلفة من 1، و الصف الثاني قد تتضمن قيمة مختلفة من 2 ولا حتى ترتيب قد تظهر forth.While كما هو متوقع, لا يتم ضمان السلوك. لا يضمن وجود TOP أو SET ROWCOUNT أيضاً ترتيب الصفوف.

إذا أردت قيم IDENTITY تعيين بطريقة متسلسلة يتبع الترتيب في عبارة ORDER BY إنشاء جدول الذي يحتوي على عمود مع الخاصية IDENTITY ثم قم بتشغيل INSERT SELECT الاستعلام … ORDER BY لتعبئة هذا الجدول.
معلومات أخرى
تعتمد قيم التعريف التي تم إنشاؤها على موضع الدالة GetIdentity() في شجرة الاستعلام (showplan) التي قد تتغير نتيجة تغييرات للمحسن خطط الاستعلام متوازي أو وجود ROWCOUNT TOP/SET. بينما قد ترى وحدات السيناريو التي SELECT INTO مع دالة IDENTITY و جملة ORDER BY إنتاج القيم في ترتيب للون هذا السلوك ولا يُضمن وتغيير قد بدون تحذير. تتضمن وحدات السيناريو التالية عبارة SELECT INTO و دالة IDENTITY.

خذ بعين الاعتبار جدول يسمى OldTable مع القيم التالية.
Col1      Col2-------   --------1         A          11        F 7         G          17        I          2         Z          

السيناريو 1

في هذا السيناريو، الاستعلام SELECT INTO يستخدم دالة IDENTITY ORDER جملة.
SELECT	Col1, Col2, ID=IDENTITY (int, 1, 1)INTO 	NewTableFROM 	OldTableOrder By Col1
NewTable قد يمكن إدراج باستخدام صفوف واحد مما يلي طريقتان.

الطريقة الأولى

Col1      Col2       ID-------   --------   --------1         A          42         Z          27         G          511        F          317        I          1
قد تلاحظ أن القيمة IDENTITY ينشئ ملقم SQL غير بنفس الترتيب كما العمود ORDER BY (عمود1) في الاستعلام.

الطريقة الثانية

Col1     Col2       ID-------  --------   -------1        A          12        Z          27        G          311       F          417       I          5
في هذه الحالة، قد تلاحظ أن IDENTITY قيمة هذا SQL Server بإنشاء في نفس الترتيب كالعمود ORDER BY (عمود1) في الاستعلام تماماً. على الرغم من ذلك، هذا coincidental ولا يعد ترتيب مضمونة سوف تظهر في كل مرة يتم فيها تشغيل الاستعلام.

السيناريو 2

استعلامات SELECT INTO التالية استخدم IDENTITY الدالة جملة ORDER BY ، مع عامل تشغيل TOP أو عبارة SET ROWCOUNT.
SELECT TOP 3 Col1, Col2, ID=IDENTITY (int, 1, 1)INTO NewTableFROM OldTableOrder By Col1
- أو -
SET ROWCOUNT 3SELECT Col1, Col2, ID=IDENTITY (int, 1, 1)INTO NewTableFROM OldTableOrder By Col1
NewTable قد يمكن إدراج مع الصفوف الموجودة في أحد الإجراءات التالية ثلاث طرق يمكن:

الطريقة الأولى

Col1   Col2   ID-----  -----  -----1      A      22      Z      17      G      3
في هذه الحالة، قد ترى أن القيمة IDENTITY ينشئ ملقم SQL غير بنفس الترتيب كما العمود ORDER BY (عمود1) في الاستعلام.

الطريقة الثانية

Col1    Col2     ID------  ------   ------1       A        12       Z        27       G        3
في هذه الحالة، قد تلاحظ أن IDENTITY قيمة هذا SQL Server بإنشاء بالضبط في نفس الترتيب كالعمود ORDER BY (عمود1) في الاستعلام. على الرغم من ذلك، هذا coincidental ولا يعد ترتيب مضمونة سوف تظهر في كل مرة يتم فيها تشغيل الاستعلام.

الطريقة الثالثة

Col1   Col2    ID------ ------  ------1      A       42      Z       27      G       5
في هذه الحالة، IDENTITY القيمة التي تنشئ SQL Server غير بنفس الترتيب كالعمود ORDER BY (عمود1) في الاستعلام. بالإضافة إلى ذلك، لا تطابق البيانات إدراج الأولي ومتطلبات زيادة المحدد في الدالة IDENTITY في الاستعلام (أساس = 1، زيادة = 1).

في الواقع بإنشاء دالة IDENTITY قيم التعريف استناداً إلى المعلمات أولي و زيادة بشكل صحيح. ومع ذلك، يحدث إنشاء قيمة هوية قبل أن يتم فرز الصفوف استناداً إلى ORDER BY. لذلك، عند استخدام عامل تشغيل TOP أو ROWCOUNT SET بيان يبدو الصفوف المدرجة في الجدول الناتج (NewTable) أن يكون لديك قيم التعريف غير صحيح. قد لا تتطابق مع قيم التعريف ينشئ ملقم SQL الأولي ومعلمات زيادة الدالة IDENTITY.

وفيما يلي مثال يتضمن INSERT INTO SELECT FROM مع ORDER BY.

خذ بعين الاعتبار جدول يسمى OldTable مع القيم التالية:
Col1      Col2-------   --------1         S          11        F 7         G          17        I2         z


يوجد أدناه الجدول الهدف المسمى NewTable (تعريف عمود تعريف)
ID (identity)    Col1     Col2---------------    -------   ------


سوف تضمن INSERT INTO SELECT FROM الاستعلام التالي مع جملة ORDER BY هذا العمود معرف في NewTable بنفس الترتيب كما عمود1.
INSERT INTO NewTable (Col1, Col2) SELECT Col1, Col2 FROM OldTable ORDER BY Col1 
ID (identity)    Col1     Col2-------------    ------   ------1                1         S2                2         z3                7         G4                11        F5                17        I

ملاحظة يتم إنشاء عمود تعريف معرف لجعل بنفس الترتيب من العمود 1. ومع ذلك، INSERT INTO لا يضمن الترتيب الفعلي المعرف أو عمود1 في NewTable. لاسترداد البيانات في ترتيب المطلوب جملة ORDER BY مطلوب كما هو موضح باتباع عبارة SELECT:
SELECT * from NewTable ORDER BY ID
هوية @@ هوية sql فرز ترتيب حدد إدراج

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 273586 - آخر مراجعة: 12/05/2015 21:44:22 - المراجعة: 4.2

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbinfo kbpending KB273586 KbMtar
تعليقات