View Full Version : گرفتن جدیدترین کلیدی که در جدول میتوان گرفت
majid.gymnast
دوشنبه 07 مرداد 1392, 11:03 صبح
باسلام
میخواستم بدونم تو sql چطور میشه قبل از ایجاد سطر، primery key اون سطر رو بدست اورد و بعدش سطر رو ایجاد کرد؟
قبلش هم جستجو کردم ولی به نتیجه ای نرسیدم
fa_karoon
دوشنبه 07 مرداد 1392, 12:35 عصر
سلام بهتره ابتدا درج کنی بعد کلید رو دریافت کنی که اون هم می تونی با Identity@@ این کار رو انجام بدی
اما برای قبل از درج هم می تونی ID آخرین رکورد رو بگیری به علاوه 1 کنی می شه ID رکوردی که الان می خوای درج کنی، اما قابل اعتماد نیست یعنی نمی تونی این
مقدار رو جایی برای همیشه ذخیره کنی یا مبنای چیزی قرار بدی چون اگر این رکورد رو درج نکنی یا قبل از درج این رکورد،(خصوصا تو سیستم های تحت شبکه) رکورد دیگه ای درج بشه اون وقت این مقدار معتبر نیست
ID آخرین رکورد هم می شه اینجوری به دست آورد : Select Max(TestID) From Test
موفق باشید
محمد سلیم آبادی
دوشنبه 07 مرداد 1392, 13:59 عصر
میخواستم بدونم تو sql چطور میشه قبل از ایجاد سطر، primery key اون سطر رو بدست اورد و بعدش سطر رو ایجاد کرد؟این بستگی به نوع PK اتان دارد. اگر از نوع GUID/UniqueIdentifier باشه شما میتونید توسط تابع newid مقدار مورد نظر را را بدست آورده و به عنوان مقدار PK استفاده کنید. البته سمت client هم دستوری وجود داره تا این مقدار را تولید کند.
در مورد Identity هم شما نمی توانید به آخرین مقدار درج شده در جدول اعتماد کنید تا با دست آوردن آن و جمع بستن آن با عدد 1 به مقدار identity جدید پی ببرید. به این دلیل که ممکن است آن ستون reseed شده باشد یا به دلایل مختلف از جمله با شکست مواجه شدن insert و یا rollback شدن مقدار آخرین id تولید شده افزایش یابد. فرض کنید آخرین مقدار 10 بوده و 10 سطر موقع درج با شکست مواجه شدن الان اگر بخواهید سطر جدید درج کنید مقدار identity برابر خواهد بود با 21 نه 11.
البته می توان توسط تابع IDENT_CURRENT به آخرین id تولید شده در جدول پی برد. پس روش زیر اشتباه است
SELECT MAX(id)+1 FROM table
یا اینکه شما میتوانید ابتدا اولین Gap را پیدا کنید و از آن به عنوان مقدار PK استفاده کنید. در این حالت باید دستور identity_insert را روی on برای جدول مورد نظر تنظیم کنید تا بطور صریح این مقدار را برای PK لحاظ کنید.
ccccccccccc
جمعه 11 مرداد 1392, 03:10 صبح
از تابع IDENT_CURRENT چگونه می بایست استفاده کرد؟:افسرده:
محمد سلیم آبادی
جمعه 11 مرداد 1392, 04:07 صبح
از تابع IDENT_CURRENT چگونه می بایست استفاده کرد؟:افسرده:
نام جدول که داخل کوتیشن قرار گرفته به عنوان ورودی این تابع محسوب میشه.
میتونید خروجی این تابع رو انتخاب کنید یا print بگیرید:
SELECT IDENT_CURRENT('table_name')
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.