PDA

View Full Version : نیازمند تابع هایی برای انجام عملیات بر روی identity



maktab
جمعه 16 دی 1390, 11:29 صبح
من می خوام برخی عملیات رو رویه یه فیلد که از نوع identity auto number است انجام بدم. برای هرکدام اگر تابع های آماده ای هست لطفا بگید اگر نیست که روش پیشنهادی نوشتن تابع رو بگید تا تابعش رو بنویسم.

1- از بین بردن فضاهای خالی:
مثلا identity ما به عدد 9000 رسیده باشه ولی از عدد 10 تا 80 و 150 تا 300 خالی باشه (identity وجود نداشته باشه) حالا تابعی میخوام که فیلدها رو بسمت بالا شیفت بده (جاهای خالی رو پر کنه)

2- جابجایی مقدار دو فیلد:
مثلا مقدار identity فیلد 8 رو با 12 بخوام تغییر بدم.

البته این دو کار رو با نوشتن تابع ساده میشه انجام داد ولی میخوام ببینم خود sql تابعی براشون داره یا نه که اگر نداره براشون بنویسم.
ممنون

linux
جمعه 16 دی 1390, 12:13 عصر
هر دوتا کارتان اساس اشتباه هست

baktash.n81@gmail.com
شنبه 17 دی 1390, 20:45 عصر
سلام ...

اگه می خوای Shift بدی اطلاعات رو یکی از روش ها اینه که اطلاعات رو بریزی تو یه table دیگه بعد این Table رو Trancate کنی که Identity از 1 شروع بشه بعد اطلاعات رو برگردونی ...
برای تعویض مقادیر همه ... که خودت گفتی ...

اما با این دوستمون موافقم ... کلا این کار اشتباه ...

Galawij
دوشنبه 19 دی 1390, 14:02 عصر
سلام،
با اجرای Query زیر می توانید شماره Id های حذف شده را روی آن جدول پیدا کنید:
WITH Missing (missnum, maxid)
AS
(
SELECT 1 AS missnum, (select max(YourColumn) from YourTB)
UNION ALL
SELECT missnum + 1, maxid FROM Missing
WHERE missnum < maxid
)
SELECT missnum
FROM Missing
LEFT OUTER JOIN YourTB tt on tt.YourColumn = Missing.missnum
WHERE tt.YourColumn is NULL
OPTION (MAXRECURSION 0)