View Full Version : حفظ یکپارچگی رکوردهای یکتا
saman6488
پنج شنبه 18 فروردین 1390, 10:09 صبح
سلام،برای اینکه یکپارچگی رکوردهای یکتا در جدولم حفظ شه باید چی کنم؟مثلا من میخوام وقتی رکوردهای 4 تا مثلا 16 فیلد ردیف پاک شد توی درج بعدیم به طور خودکار بازسازی صورت بگیره و از 17 شروع نکنه(از اونجایی که دارم از identityاستفاده میکنم),و دوباره از 4 شروع به درج کنه،ممنون میشم راهنماییم کنید.
SReza1
پنج شنبه 18 فروردین 1390, 11:55 صبح
خوب براي اينكه اين كار رو بكني بايستي فيلد identity رو reset بكني . به كمك اين دستور :
DBCC CHECKIDENT
( 'table_name'
[ , { NORESEED
| { RESEED [ , new_reseed_value ] }
}
]
)
مثال :
DBCC CHECKIDENT (TbPersonel , RESEED, 1000)
محمد سلیم آبادی
پنج شنبه 18 فروردین 1390, 12:37 عصر
سلام،برای اینکه یکپارچگی رکوردهای یکتا در جدولم حفظ شه باید چی کنم؟مثلا من میخوام وقتی رکوردهای 4 تا مثلا 16 فیلد ردیف پاک شد توی درج بعدیم به طور خودکار بازسازی صورت بگیره و از 17 شروع نکنه(از اونجایی که دارم از identityاستفاده میکنم),و دوباره از 4 شروع به درج کنه،ممنون میشم راهنماییم کنید.
سلام،
به نظرم لزومی به این کار نیست. ولی اگر به همچین کاری احتیاج دارین می تونید ابتدا کوچکترین مقداری که فضای هرز بوجود اورده رو پیدا کنید سپس توی جدول بطور صریح درج کنید (چرا که Identity رو نمیشه دستی وارد کرد)
برای پیدا کردن کوچکترین مقداری که خالی هست می تونید این کوئری رو اجرا کنید:
SELECT MIN(id) FROM TableName AS T
WHERE NOT EXISTS (SELECT * FROM TableName WHERE id = T.id + 1);
و بعد از اینکه این مقدار رو پیدا کردین توسط دستور زیر در جدول درج می کنید:
SET IDENTITY_INSERT table ON
INSERT INTO TableName(id, ...)
SELECT MIN(id), @value1, @value2, ... FROM ....
SET IDENTITY_INSERT table OFF
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.