ورود

View Full Version : آپدیت کردن فیلد auto number



سیده ساناز
دوشنبه 17 شهریور 1393, 09:43 صبح
سلام
من در sql یک جدول ایجاد کردم و یکی از فیلدها رو به عنوان کلید انتخاب کردم و نوع آن را int در نظر گرفتم و identity seed آنرا 100 گرفتم ، می خواهم بعد از حذف یکی از رکوردها، رکوردهای بعدی به طور اتوماتیک update شوند .

به عنوان مثال اگر 100,101,102,103,104,105,106 باشد و رکورد 103 را حذف کنیم بصورت زیر update شود 100,101,102,103,104,105
میشه خواهش کنم لطف کنید دستور sql اش را بنویسید
من خیلی عجله دارم
مرسی

mohammad reza beizavi
دوشنبه 17 شهریور 1393, 12:01 عصر
درود
کاری که دارید انجام میدی دستور sql نداره و صد البته کار اشتباهی هست.
اما اگر اینکار رو بخواید انجام بدید باید از داخل برنامه انجام بدید برای اینکه فیلد identity رو بتونید ویرایش کنید کافی از این دستور استفاده کنید

setidentity_insert YourTable ON
البته بعد از اینکه کارتون تموم شد بهتره که دوباره identity_insert رو off کنید.

setidentity_insert YourTable OFF
پیشنهاد:
بهتره بگید می خواید چکار کنید تا بهتر بشه کمک کرد.

سیده ساناز
چهارشنبه 19 شهریور 1393, 08:15 صبح
با تشکر از راهنمایی خوبتان
من می خواهم با دلفی و sql یک نرم افزار بنویسم ، هر وقت کاربر بخواهد اطلاعات جدید وارد کند یه فیلد که به عنوان کلید باشه به طور خودکار یه شماره در sql اضافه کنه و هر وقت کاربر یکی از اطلاعات را از جدول حذف کنه فیلد کلید به طور خودکار update بشه ولی حتما باید شماره گذاری از عدد خاصی مثل عدد 100 شروع بشه.
ممنون

fakhravari
چهارشنبه 19 شهریور 1393, 08:54 صبح
خب یه رکورد پاک بشه بعد شماره رکورد قبلی میگیره
چطوری میخواین بفهمید این رکورد رکورد قبلی نیست!!
یا براتون id مهم نیست!!

mohammad reza beizavi
چهارشنبه 19 شهریور 1393, 10:41 صبح
درود
حق با جناب FAKHRAVARI هست، کلا اینکارتون اشتباهه.
بازم بگم بهتره بگید می خواید چکار کنید تا بهتر بشه کمک کرد.
اما در نهایت اگر Id براتون مهم نیست می تونید از tiger و از FOR DELETE استفاده کنید. اینجور یک بار trigger رو می نویسید و دیگه نیازی به کار توی کدتون ندارید.
به این صورت که با هر بار delete شدن یک رکورد این triger اجرا میشه، داخل triger مشخصه ی identity_insert رو on کنید بعد تمام id های جدول بزرگتر از رکوردی که داره پاک میشه رو 1 واحد ازش کم کنید و بعد identity_insert رو off کنید.
فکر کنم اینجور بشه:










CREATE TRIGGER sampleTrigger
ON testDB.dbo.table1
FOR DELETE
AS
Set identiti_insert table1 ON;
update table1 set id=id-1 where id > (SELECT id FROM deleted) ;
Set identiti_insert table1 ON;
GO

سیده ساناز
چهارشنبه 19 شهریور 1393, 14:27 عصر
منظورتان رو متوجه شدم کلید اصلی اگر آپدیت بشه اطلاعات اشتباه میشه نباید اینکار را انجام بدم.
با تشکر از راهنماییتون