PDA

View Full Version : بدست آوردن عدد بعدی AutoNumber



once4ever
سه شنبه 25 اردیبهشت 1386, 21:17 عصر
یک کوئری برای بدست آوردن عدد بعدی AutoNumber میخوام

majid_afra222
سه شنبه 25 اردیبهشت 1386, 21:29 عصر
سلام
اگه منظور فیلد IDENTITY هستش.
با IDENT_INCR می تونی مقداری که به فیلد IDENTITY در هر بار تولید عدد اضافه مشه رو روی جدول بدست بیاری.
برای بدست آوردن مقدار فعلی فیلد IDENTITY هم می تونی بعد از هر INSERT بوسیله SCOPE_IDENTITY() برای هر جدول اونرو بدست بیاری، یا اینکه از IDENT_CURRENT استفاده کنی.

once4ever
سه شنبه 25 اردیبهشت 1386, 21:46 عصر
ممنون اما هیچ کدوم جواب من نبود ;)
واسه اینا (جز اولیش) راه دیگه ای هم هست.
اما چیزی که من میخوام اینه که بدونم اگه یک کوئری insert بکار ببرم, مقدار id چقدر میشه (قبل از اینکه insert کنم)

AminSobati
سه شنبه 25 اردیبهشت 1386, 22:09 عصر
Scope_Identity رو پیشنهاد میکنم چون معمولا نتیجه Insert خودمون رو لازم داریم که این تابع میده. بعضا برنامه نویسها از Identity@@ استفاده میکنند، اما در مورد این متغیر مراقب باشید چون اگر Insert شما یک Trigger فعال کنه و داخل اون هم به جدول دارای فیلد Identity رکوردی اضافه بشه، Identity@@ مقدار تولید شده در Trigger رو برمیگردونه، نه نتیجه Insert ما رو

AminSobati
سه شنبه 25 اردیبهشت 1386, 22:11 عصر
ممنون اما هیچ کدوم جواب من نبود ;)
واسه اینا (جز اولیش) راه دیگه ای هم هست.
اما چیزی که من میخوام اینه که بدونم اگه یک کوئری insert بکار ببرم, مقدار id چقدر میشه (قبل از اینکه insert کنم)
چنین عددی رو نمیشه با یقین اعلام کرد. چون بحث همزمانیه کاربرها مطرحه. مگر اینکه یک رکورد خالی Insert کنین و اون برای ویرایش به سمت Client بیارین تا مطمئن باشید کسی این id رو استفاده نخواهد کرد.

linux
چهارشنبه 26 اردیبهشت 1386, 00:31 صبح
ممنون اما هیچ کدوم جواب من نبود ;)
واسه اینا (جز اولیش) راه دیگه ای هم هست.
اما چیزی که من میخوام اینه که بدونم اگه یک کوئری insert بکار ببرم, مقدار id چقدر میشه (قبل از اینکه insert کنم)
به چه دردت می خوره؟!
همانطور که آقای ثباتی گفتند نمی توان در این مورد محاسبه کرد.ببنید در sql سرور فرض بر این هست که همزمان تعداد زیادی کاربر در حال استفاده از یک بانک اطلاعاتی هستند اگر برنامه شما فقط یک کاربر داره می توانید این را بدست بیاورید که باز هم وقتی autonumber هست درست نیست مگر اینکه از اول خودتان این اعداد را تولید بکنید
من فکر می کنم که شما احتیاج به ورود اطلاعات در دو جدول که با یک کلید به هم ربط دارند دارید و می خواهید همزمان هر دو جدول را باهم مقدار دهی کنید.

once4ever
چهارشنبه 26 اردیبهشت 1386, 10:07 صبح
ممنون از دوستان
برنامه ام single هست (پس مشکلی برای همزمانی کاربرها ندارم)
و همانطور که فهمیدید این شماره رو برای اطلاعات یک جدول دیگه میخوام
راه دیگه ای که داره اینه که اول اینسرت کنم و بعد آپدیت کنم (یعنی دوبار ارسال کوئری بجای یکبار)
درضمن اگه کاربر منصرف شد, دیگه نیازی نیست از این جدول (مستر) چیزی حذف بشه

خوب حالا کدی مربوط به sql هست که عدد بعدی رو برگردونه؟ (اگه رو اکسس هم کار کنه چه بهتر)

majid_afra222
چهارشنبه 26 اردیبهشت 1386, 10:26 صبح
ممنون اما هیچ کدوم جواب من نبود ;)
واسه اینا (جز اولیش) راه دیگه ای هم هست.
اما چیزی که من میخوام اینه که بدونم اگه یک کوئری insert بکار ببرم, مقدار id چقدر میشه (قبل از اینکه insert کنم)

سلام
با IDENT_CURRENT(table_name) می تونی مقدار فعلی فیلد IDENTITY در هر جدول دارای IDENTITY بدست بیاری.
با IDENT_INCR هم میتونی مقداری که در هر بار تولید عدد اضافه میشه رو بدست بیاری.



select IDENT_CURRENT('dbo.TBL_1')
select IDENT_INCR('dbo.TBL_1')

once4ever
چهارشنبه 26 اردیبهشت 1386, 19:56 عصر
نتونستم از این کد استفاده کنم! (تو اکسس بهش احتیاج داشتم)
راهی هست که وقتی اینسرت میکنم , این کد autonumber جدید رو برگردونم و بفهمم ؟ یا اینکه بعد از اینسرت باید با سلکت بفهمم؟

linux
چهارشنبه 26 اردیبهشت 1386, 20:02 عصر
ممنون از دوستان
برنامه ام single هست (پس مشکلی برای همزمانی کاربرها ندارم)
و همانطور که فهمیدید این شماره رو برای اطلاعات یک جدول دیگه میخوام
راه دیگه ای که داره اینه که اول اینسرت کنم و بعد آپدیت کنم (یعنی دوبار ارسال کوئری بجای یکبار)
درضمن اگه کاربر منصرف شد, دیگه نیازی نیست از این جدول (مستر) چیزی حذف بشه

خوب حالا کدی مربوط به sql هست که عدد بعدی رو برگردونه؟ (اگه رو اکسس هم کار کنه چه بهتر)
ببنید
این روش را پیشنهاد می کنم
فرض کنید شما یک چیزی شبیه به فاکتور دارید
قسمت بالای فاکتور شامل تاریخ و شماره و شرح در جدول a و قسمت
شماره و ردیف و شرح کالا و مبلغ در جدولB قرار دارند.
بهتر هست که وقتی کاربر این اطلاعات را وارد می کند اول اطلاعات جدول a را وارد کند و بعد اطلاعات جدول b را وارد کند.

once4ever
چهارشنبه 26 اردیبهشت 1386, 22:51 عصر
خوب این عمل به این راحتی انجام نمیشه
همون قسمت اولش. میخوام شماره بدم به بانک b
اول اینسرت و بعد سلکت کنم که آخرین آی دی چنده و اونو بدم برای بانک b ?
(در آینده باید مولتی یوزر باشه و این روند خرابکاری میکنه)

linux
پنج شنبه 27 اردیبهشت 1386, 01:46 صبح
خوب این عمل به این راحتی انجام نمیشه
همون قسمت اولش. میخوام شماره بدم به بانک b
اول اینسرت و بعد سلکت کنم که آخرین آی دی چنده و اونو بدم برای بانک b ?
(در آینده باید مولتی یوزر باشه و این روند خرابکاری میکنه)
بله باید اینکار را کنید و در آینده هیچ مشکلی هم پیش نخواهد آمد