PDA

View Full Version : مشکل با identity



mohammadjavad
دوشنبه 14 مرداد 1392, 02:21 صبح
سلام به همه دوستان

یه سوال داشتم اگه جواب بدین ممنون میشم

چند وقت پیش برای یه شرکتی برنامه تحت شبکه نوشتم , برنامه بدون هیچ مشکلی کار میکرد تا این که چند روز پیش اپراتور های اونجا

به من خبر دادن که داده ها INSERT نمیشن .

خطای که موقع INSERT کردن داده ها میده خیلی عجیب .

Violation of PRIMARY KEY constraint Cannot insert duplicate key in object

این در حالی که فیلد ID این جدول من identity ش روشن هست و به صورت اتوماتیک برای هر رکورد جدید مقدار جدید تولید میکنه . و اصلا و قاعدتا نباید فیلد مقدار تکراری بگیره که با همچین خطای

مواجه شم .

دوستان اگه راهنمای کنن که باید چیکار کنم ممنون میشم

antionline
دوشنبه 14 مرداد 1392, 11:52 صبح
سلام
دیتابیست sql هستش ؟
برو تو سرور و تنظیمات دیتابیس رو چک کن. مطمعنا کسی نمی تونه علکی تغییرش داده باشه مگر اینکه sql بلد باشه !
بصورت دستی توی sql یه اطلاعات علکی اضافه کن ببین قسمت id رو خودش پر میکنه
البته اگر دیتابیست sql هست

mohammadjavad
دوشنبه 14 مرداد 1392, 23:48 عصر
سلام
دیتابیست sql هستش ؟
برو تو سرور و تنظیمات دیتابیس رو چک کن. مطمعنا کسی نمی تونه علکی تغییرش داده باشه مگر اینکه sql بلد باشه !
بصورت دستی توی sql یه اطلاعات علکی اضافه کن ببین قسمت id رو خودش پر میکنه
البته اگر دیتابیست sql هست

دیتابیس SQL SERVER 2008
تنظیمات دیتابیس دوباره چک شد ولی همچنان این مشکل حل نشد .

antionline
سه شنبه 15 مرداد 1392, 09:17 صبح
با استفاده از دستور alter در sql یک query باز کن و خواصیت id رو تغییر بده. مثلا به int تغییر بده و بعد که انجام شد دوباره برگردون به همون حالت قبلی که تعریف کرده بودی و مجدد تست کن.
راستی بصورت دستی(از طریق خود sql) اطلاعات وارد جدول کردی ببینی ستون id رو خودش پر می کنه یا نه ؟

محمد سلیم آبادی
سه شنبه 15 مرداد 1392, 17:04 عصر
بررسی کنید ببینید آیا کاربران بصورت صریح برای Id مقدار درنظر میگیرند یا خیر. و همچنین از reseed نشدن آن نیز مطمئن شوید.

mohammadjavad
جمعه 18 مرداد 1392, 02:53 صبح
با استفاده از دستور alter در sql یک query باز کن و خواصیت id رو تغییر بده. مثلا به int تغییر بده و بعد که انجام شد دوباره برگردون به همون حالت قبلی که تعریف کرده بودی و مجدد تست کن.
راستی بصورت دستی(از طریق خود sql) اطلاعات وارد جدول کردی ببینی ستون id رو خودش پر می کنه یا نه ؟

ممنون از پاسخ

خوب از نوع int هستش ستون ID جدولم .

خیر به صور دستی هم از داخل SQL SERVER اجازه نمیده . به عکس زیر تو جه کنید .
108800

مشکل از اونجای ناشی میشه که من یه رکورد رو Delete میکنم و بعد از ان قصد INSERT کردن دارم

mohammadjavad
جمعه 18 مرداد 1392, 03:04 صبح
بررسی کنید ببینید آیا کاربران بصورت صریح برای Id مقدار درنظر میگیرند یا خیر. .

سلام ممنون از پاسخ .
اگه منظور شما رو درست فهمیده باشم
مقادیر ID که به صورت اتوماتیک و صریح توسط خود SQL SERVER ایجاد میشد و هیچ دخالتی ندارن.


و همچنین از reseed نشدن آن نیز مطمئن شوید

بنده چند روز پیش یه اپدیت کوچیگی برنامه رو کردم برای این که ID ریست شه و از 1 شروع کنه به خاطره همین از کوری زیر بعد از دستور DELETE استفاده کردم


DBCC CHECKIDENT (Specification, reseed, 1)

محمد سلیم آبادی
جمعه 18 مرداد 1392, 17:46 عصر
اگر با دستور delete تمام سطرهای جدول رو حذف کرده باشین بعدش reseed کرده باشین مشکلی پیش نمیاد. چون داده ای نیست که تداخلی ایجاد کنه.
در مورد فوق بهتره از truncate table استفاده بشه (اگر جدول parent نباشه)

منظورم از درج صریح اینه که کاربر خودش دستی مقدار به ستون id بده با کمک تنظیم identity_insert

mohammadjavad
شنبه 26 مرداد 1392, 12:42 عصر
اگر با دستور delete تمام سطرهای جدول رو حذف کرده باشین بعدش reseed کرده باشین مشکلی پیش نمیاد. چون داده ای نیست که تداخلی ایجاد کنه.
در مورد فوق بهتره از truncate table استفاده بشه (اگر جدول parent نباشه)

منظورم از درج صریح اینه که کاربر خودش دستی مقدار به ستون id بده با کمک تنظیم identity_insert

سلام ممنون دوست عزیز مشکل از reseed بود که انتهای کوری گذاشته بودم .