PDA

View Full Version : درج رکورد جدید با شماره identity پاک شده



احمد سامعی
پنج شنبه 17 فروردین 1391, 12:57 عصر
سلام
یک جدول دارم که ستون id از نوعidentity هست. کاربر چند تا از رکوردها را پاک می کنه. وقتی رکورد جدید می خواد ثبت بشه چطوری می تونم اول تو جدول جستجو بزنم و شماره آی دی های خالی پیدا کنم رکورد جدید با اون شمار درج کنم و اگر آی دی پاک شده ای نبود طبق روال عادی رکورد جدید ثبت بشه یعنی آی دی آخری به علاوه یک

Galawij
پنج شنبه 17 فروردین 1391, 13:53 عصر
سلام،
این Query، لیست آی دی های حذف شده از جدول را بهتون می ده(بقیش هم که راحته):


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)

oliya24
پنج شنبه 17 فروردین 1391, 15:21 عصر
میشه در مورد این کد توضیح هم بدید که چطور این کار رو انجام میده؟؟؟؟

mina_ghorbani
شنبه 19 فروردین 1391, 13:09 عصر
id كه از دست ميره نميشه با اون كد رو براي يه ركورد ديگه استفاده كرد اما مي شه از سوختن id جلوگيري كرد بعد از دستور insert ات اينو اضافه كن كه اگر insert خطا داد id نسوزه




IF@@ERROR>0

BEGIN

DBCC CHECKIDENT('Products','Reseed',1)

DBCC CHECKIDENT('Products','Reseed')

END

SReza1
سه شنبه 29 فروردین 1391, 16:25 عصر
با اين كد اولين ID كه به صورت لايي رد شده باشد رو پيدا ميكنه


DECLARE
@F INT

SELECT TOP 1 @F = t1.YourIdField + 1 FROM YourTable AS t1
LEFT JOIN YourTable AS t2 ON t1.YourIdField = t2.YourIdField - 1
WHERE t2.YourIdField IS NULL


خوب حالا ميتوني با اين id ركورد جديد را بزني . كافيه فقط identity را On كني



SET IDENTITY_INSERT YourTable ON

INSERT INTO YourTable (YourIdField , ... ) VALUE (@F , ...)

SET IDENTITY_INSERT YourTable OFF