50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

ریست اتو اینکریمنت بعد از پاک کردن یک ردیف

با سلام

من ی تیبل دارم که یکی از ستوناش اتو اینکریمنته حالا وقتی یه ردیف رو حذف میکنم میخوام دوباره ستونه به ترتیب بشه باید چکار کنم ممنون میشم کمکم کنید

مثلا

1

2

3

4

وقتی 2 رو حدف میکنم میشه

1

3

4

میخوام بشه

1

2

3

با تشکر

پرسیده شده در 1394/09/23 توسط

6 پاسخ

2

با سلام

شما بهتر است که از تابع ROW_NUMBER استفاده کنید.

با تشکر

حمید ج. فرد

پاسخ در 1394/09/23 توسط
0

با تشکر از جواب دهی سریعتون

میشه لطف کنید به عنوان نمونه یه تکه کد هم بذارید با تشکر

پاسخ در 1394/09/23 توسط
3
SELECT ROW_NUMBER() OVER(ORDER BY Cod Asc) AS Row, *
FROM dbo.TableA;
پاسخ در 1394/09/23 توسط
0

سلام من میخوام دستور حذف برای جدولام بنویسم ولی بین جدول هام ارتباط وجود داره و من نمیتونم این کارانجام بدم

میخوام از دستور cascading استفاده کنم میشه راهنماییم کنید که چطور میتونم از این روش استفاده کنم؟

ممنون میشم راهنماییم کنید

پاسخ در 1396/09/01 توسط
1

سلام؛

ضمن تشکر از HamidJFard عزیز، این نکته رو بگم که کد نمونه، فقط جهت نمایش شماره ردیف ترتیبی در کنار ستون های موجود هست، یعنی تغییری در ستون Identity شما (مثلاً Code) ایجاد نمی کنه. و اگر سؤال شما این بوده که دقیقاً کدهای موجود رو تغییر بدین یا به قولی بعد از حذف یک ردیف، بقیه کدها شیفت داده بشن، باید بگم:

1- اصولاً تغییر مقادیر کلید اصلی توصیه نمیشه، و باید حواستون به کلیدهای خارجی و ارتباطش با جداول دیگه باشه.

2- اگر نیاز دارید که بعد از هر حذف، کدها تغییر کنن و در واقع یک عملیات روتین هست، به نظرم اصلاً از Identity یا همون Auto-Increment استفاده نکنید.

3- دستور Update روی فیلدهای Identity امکانپذیر نیست.

4- اگر نیاز شما به تغییر کدها دفعتاً پیش آمده، می توانید به صورت دستی و موقت Design جدول را تغییر داده و بعد از No کردن تنظیم Is Identity ستون کد، با استفاده از همان دستور ROW_NUMBER یا به هر نحو دیگری، کدها را Update کنید و سپس مجدداً تنظیم Is Identity را Yes کنید.

5- اگر هم به هر دلیل می خواهید حتماً با استفاده از دستور، کدها را تغییر دهید، می بایست ابتدا با عبارت زیر درج دستی Identity را فعال کنید:

SET IDENTITY_INSERT TableName ON

سپس هر رکوردی که قرار است کد آن Update شود را با کد جدید Insert کرده و خودش (کد فعلی) را Delete کنید. در واقع چون Update وجود ندارد، Delete و Reinsert انجام می شود.

و در انتهای دستورات درج دستی Identity را غیرفعال کنید:

SET IDENTITY_INSERT TableName OFF
  • اتفاقاً یکی از مزیت های Identity این است که رکوردهای حذف شده، از Gap موجود در Id ها مشخص است و همچنین اگر یک Relation وجود داشته که با Delete شدن کلید اصلی، حذف نشده (به صورت Cascade) لااقل بلاتکلیف می ماند، نه اینکه اشتباهاً به کلید اصلی دیگری وصل شود. پس بهتر است Id ها متغیر نباشند.

** یک نکته دیگر هم اینکه گاهی نیاز می شود، مقدار فعلی شمارنده را تغییر دهید یا به عبارتی Reset کنید، مثلاً رکوردهایی به ترتیب از 1 تا 10 داشته اید که 5 تای آخر را حذف کرده اید، SQL هنگام درج، به اولین رکورد بعد از آن شماره 11 را اختصاص خواهد داد و نه 6، شما می توانید با استفاده از دستور زیر، این شمارنده را Reset کنید:

DBCC CHECKIDENT ('TableName', RESEED, 1)

موفق باشید

پاسخ در 1394/10/02 توسط
0

با سلام عذر میخوام این دستورات را در ویژوال استودیو با مدل داده ای انتیتی فریم ورم

در کدام قسمت باید نوشت؟

با تشکر

پاسخ در 1396/03/04 توسط

پاسخ شما