كيف يمكنني reseed عمود الهوية في T-SQL الجدول متغير ؟

StackOverflow https://stackoverflow.com/questions/147210

  •  02-07-2019
  •  | 
  •  

سؤال

لدي T-SQL الجدول متغير (لا جدول) الذي السيارات تزايد عمود هوية.كنت ترغب في مسح كافة البيانات من هذا المتغير ثم إعادة تعيين قيمة عمود الهوية إلى 1.كيف يمكن القيام بذلك ؟

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم الجدول متغير, لا يمكنك أن تفعل ذلك.إذا كان الجدول, هل يمكن اقتطاع أو استخدام DBCC CHECKIDENT.ولكن ، إذا كنت لديك استخدام الجدول متغير, لديك لاستخدام شيء ما عدا عمود الهوية.أو بتعبير أكثر دقة في استخدام هوية عمود في الجدول متغير ولكن الإخراج باستخدام ROWNUMBER:

DECLARE @t table (pkint int IDENTITY(1,1), somevalue nvarchar(50))
INSERT INTO @t (somevalue) VALUES( 'one')
INSERT INTO @t (somevalue) VALUES('twp')
INSERT INTO @t (somevalue) VALUES('three')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t
DELETE FROM @t
INSERT INTO @t (somevalue) VALUES('four')
SELECT row_number() OVER (ORDER BY pkint), somevalue FROM @t

إنه أفضل ما يمكنك القيام به مع الجدول متغير.

نصائح أخرى

اقتطاع الجدول سيتم تفريغ جميع البيانات ثم إعادة تعيين هوية البذور.

وإلا, يمكنك استخدام هذه دعوة لإعادة الهوية مع الإبقاء على أي من البيانات:

DBCC CHECKIDENT (yourtableName, reseed, @NewStartSeedValue)

أقترح عليك استخدام اثنين من متغيرات الجدول.@في جدول1 له هوية البذور في أول عمود.@Table2 نفس العمود الأول ولكن لا هوية البذور على ذلك.

كما كنت في حلقة من خلال العملية الخاصة بك ،

Insert into @Table2 from @Table1

ثم حذف من كل من الجداول الخاصة بك عملية الحلقات.

في أول الممر ، @Table2 سوف يكون لها رقم تسلسلي في الصف الأول بدءا من 1.

للمرة الثانية خلال الحلقة الثانية الجدول قد متسلسلة الأرقام في العمود الأول بدءا من يقول 1081.ولكن إذا قمت بتحديد قيمة الحد الأدنى إلى متغير

(Select @FixSeed = min(RowID) From @Table2)

ثم يمكنك تحديث @Table2 لجعل RowID تبدأ في 1 على النحو التالي:

Update @Table2  Set  RowID = RowID - @FixSeed +1

ويساعد هذا الأمل

    declare @tb table (recid int,lineof int identity(1,1))

    insert into @tb(recid)
    select recid from tabledata 

    delete from @tb where lineof>(select min(lineof) from @tb)+@maxlimit

أنا فعلت هذا عندما أردت استخدام أعلى متغير عند استخدام SQL server 2000.أساسا ، يمكنك إضافة سجلات وبعد ذلك ننظر في الدنيا واحد.كان عندي نفس المشكلة و لاحظت هذا الموضوع.حذف الجدول لا إعادة تعيين البذور على الرغم من أنني أتصور باستخدام الذهاب إسقاط الجدول متغير لإعادة البذور.

@maxlimit في الاستعلام أعلاه للحصول على أعلى 900 الاستعلام منذ الجدول متغير ستكون مختلفة ابتداء من الهوية الرئيسية ، وهذا من شأنه حل هذه المسألة.

وأي استفسار يمكن طرح المنبثقة الإجراءات لجعلها إدراج "1" ، الخ.

إذا كنت بحاجة إلى اقتطاع الجدول متغير في كل منعطف من حلقة في حين يمكنك وضع declare @myTbl (...) البيان في الحلقة.هذا سوف إنشاء الجدول و تعيين عمود هوية في كل منعطف من الحلقة.ومع ذلك ، فقد الثقيلة لضرب الأداء.كان إلى حد ما في حلقة ضيقة ، redeclaring الجدول متغير نسبة إلى delete @myTbl عدة مرات أبطأ.

  • دان
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top