PDA

View Full Version : مشکل identity با unique



M.Hashemi
سه شنبه 06 مهر 1389, 17:42 عصر
با سلام
من یک جدول با دو فیلد ساختم.
فیلد اول با نام id و از identity و primary key در ان استفاده کردم.
فیلد دوم را با نام name و در ان از unique index استفاده کردم تا داده تکراری نداشته باشد.
حال وقتی که می خواهم داده تکراری در فیلد name بریزم error میده و داده را insert نمیکند(که منطقی هم است) اما با این که داده insert نمیشود اما مقدار فیلد id که identity است زیاد میشود.
به عنوان مثال :
اگر id مقدار 5 را داشته باشد حال اگر ما یک داده تکراری به ان بدیم (که insert هم نمی شود) و بعد یک داده غیر تکراری بدیم مقدار id برابر با 7 می شود که اشتباه است و باید مقدار ان 6 باشد.
چگونه می توانم جلوی این کار را بگیرم.
دوستان اگر کسی جواب این سوال را میداند لطف کند بنویسید.
با تشکر

Rezahak
چهارشنبه 07 مهر 1389, 08:38 صبح
استفاده از identity دقيقا باعث همين اتفاق مي شود نه تنها در هنگام خطاي duplicate index بلكه در مورد هر خطايي كه در هنگام insert كردن اتفاق بيفتد مقدار id يكي بالا مي رود ولي به نظر من اشگالي ندارد چون قرار نيست همه id ها يكي پس از ديگري پشت سر هم باشند
چون اگر اين اتفاق هم نمي افتاد شما ممكن بود به صورت دستي يك ركورد را از وسط جدول حذف كنيد و خودتان ترتيب را به هم بزنيد
حالا اگر مي خواهيد يك جور ديگر عمل كنيد مثلا در هنگام خطا يكي به مقدار id اضافه نشود خودتان بايد مقدار identity را توليد كنيد
مثلا يك جدول كمكي بگيريد كه شامل دو فيلد TableName و LastID باشد تا آخرين ID هر جدول را در آن نگهداري كنيد بعد يك تابع بنويسيد كه آخرين ID را يكي اضافه كند و به شما برگرداند و در ضمن مقدار آنرا در فيلد مربوطه همان جدول كمكي ذخيره كند سپس هر وقت خواستيد يك ركورد در جدولي كه فيلد id دارد درج كنيد دستور insert را به همراه اين تابع بكار ببريد .... البته transaction فراموش نشود