به دست آوردن آدرس id آزاد در جدول

با نام و یاد خداوند. سلام خدمت کاربران گرامی
در جلسه  قبل شما را با حلقه while در sql آشنا کردیم، تا در این جلسه با استفاده از همین دستور آدرس id آزاد در جدول مان را پیدا کنیم.

یک  جدول به نام Student داشتیم . ابتدا با استفاده از دستور select  اطلاعات جداول را مشاهده می کنیم:

select *
from Student

خروجی جدول student:

جدول student - حلقه while در sql

اگر به جدول نگاه کنید متوجه می شوید که شروع مقدار  id  جدول  student با عدد 1000 بوده است که به هر دلیلی (حذف و آپدیت و ….) رکوردهایی از جدول حذف شده است ما در اینجا به دنبال مقادیری از ستون id  هستیم که از جدول  حذف شده اند .

با استفاده از کوئری زیر می توانیم  مقادیر آزاد (free ) جدولمان را بدست بیاوریم .

 

declare @idfree int  –گام1  
set @idfree =1030  –گام2        
while (select count(id) from student where @idfree=id)>0   –گام3   

(یا—-  while exists(select id from student where @idfree=id)  —— )

begin
set @idfree=@idfree+1
end
print @idfree 

توضیحات کد

گام 1:

ابتدا یک متغیر تعریف میکنیم که  type  آن را همان type ی قرار می دهیم که برای متغییر id  در جدولمان قرار داده ایم .

گام 2:

مقداری را برای متغیرمان ست می کنیم (این همان مقداری است که می خواهیم  از آن مقدار برای پیدا کردن آی دی های  جا افتاده  یا آزاد ) استفاده کنیم .

گام 3:

باید دستوری را بنویسیم که مقدار متغیری که تعریف کرده ایم را در جدول ، داخل رکوردهای ستون id مقایسه کند اگر وجود نداشت  آن را به عنوان مقدار id  آزاد در نظر بگیرد . برای نوشتن این دستور  از حلقه ی while  استفاده می کنیم .که در جلسه قبل آن را آموزش داده ایم .

while   شرط
begin
دستور
end

پیاده سازی کوئری

declare @idfree int 

برای تعریف متغیر از کلمه کلیدی declare استفاده می کنیم و حتما نامی که برای متغییرمان در نظر می گیریم باید با @ شروع شود

set @idfree =1030
while (select count(id) from student where @idfree=id)>0 

ابتدا در مورد دستورات داخل پرانتز توضیح بدهم .

دستور count به معنای شمارش است که می گوید سطرهای ستون id  را در جدول  student  بشمار .

دستور  where  ، یک دستور شرطی است که می گوید اگر مقدار  idfree(همان مقداری که برای متغیرمان ست کرده ایم ) با مقدار id  جدول  student  برابر بود.یعنی شرط برقرار است ، یعنی این  id  در جدول وجود دارد .وگرنه این id  در جدول وجود ندارد .

 

begin
set @idfree=@idfree+1
end

 

با استفاده ازکلمه ی کلیدی  while روند دستورات را داخل یک حلقه قرار داده ایم  که اگر جواب where    برابر با  true  بود( مقدار true  برابر با  1 است ) پس شرط برقرار است  و دستورات حلقه ی while  اجرا شود  وگرنه اگر جواب برابر با   false   بود( مقدار false  برابر با  0 است ) پس شرط برقرار نیست واز حلقه خارج شود .

تا زمانی این حلقه در گردش است  که کد آزاد پیدا شود .

نکته : دستورات حلقه ی while  همان دستوراتی است که بین begin  و end  قرار دارد .

کلمه ی کلیدی begin  یعنی شروع دستورات while

کلمه ی کلیدی end   یعنی خاتمه دستورات while

print @idfree

خروجی این کوئری را باهم مشاهده می کنیم:

عدد 1033 را به ما نمایش می دهد .

سری به جدول student می زنیم .

جدول student - حلقه while در sql

ستون id  را مشاهده کنید id با مقادیر 1030 ،1032،1031  وجود دارند اما id  با مقدار 1033  وجود ندارد .

در این قسمت می خواهیم با استفاده از همین id  یعنی 1033  یک رکورد جدیدی را به جدولمان اضافه کنیم .

در جلسات قبل  دستور اضافه کردن مقادیر به جدول را آموزش داده ایم که می توانید برای مشاهده  ی آن به جلسه ی چهاردهم آموزش sql  مراجعه کنید  .

برای اضافه کردن یک رکورد جدید از دستور insert استفاده می کنیم .

insert student values (@idfree,’sins’,’fadr’,19,1)

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

با هم جدول student را مشاهده می کنیم تا ببینیم که آیا رکوردی با  id 1033  به جدولمان اضافه شده است یا نه ؟

بله مشاهده می کنیم که یک ردیف ، با id 1033  به جدول student  اضافه شده است .

باز همین  کوئری را اجرا می کنیم .

ببینیم چه اتفاقی می افتد ؟

id آزاد در جدول - نتیجه

در این تصویر مشاهده می کنید که id  با مقدار 1035  را پیدا کرده است و با دستور insert   ی که نوشته ایم یک ردیف به جدول اضافه شده است .

جدول student را مشاهده می کنیم تا ببینیم که آیا رکوردی با  id 1035   به جدولمان اضافه شده است یا نه ؟

id آزاد در جدول- نتیجه اجرا

بله مشاهده می کنیم که یک ردیف ، با id 1035  به جدول student  اضافه شده است .

نکته:با استفاده از این دستور حتی می توانیم جلوگیری کنیم از وارد کردن کد تکراری

نکته : کد بهینه تری را می توانیم بجای دستور جلوی حلقه ی while استفاده کنیم   . یعنی بجای نوشتن while (select count(id) from student where @idfree=id)>0 می توانیم از دستورات زیر استفاده کنیم .

while exists(select id from student where @idfree=id)     

این دستورات همانند دستورات بالا عمل می کنند ولی این کد ها، کدهای  بهترو حرفه ای تری هستند  و همچنین خوانایی برنامه را بالاتر می برد .

یکبار کئوری مربوط به کد های آزاد را با استفاده از این دستورات اجرا می کنیم   و یک ردیف را با id  ای که پیدا خواهد کرد اضافه می کنیم .

ابتدا دستورات را اجرا می کنیم.

declare @idfree int
set @idfree =1030
while exists(select id from student where @idfree=id)

begin
set @idfree=@idfree+1
end
print @idfree
insert student values (@idfree,’sins’,’fadr’,19,1)

id آزاد در جدول- نتیجه اجرا

یکبار دیگر  جدول student  را با هم مشاهده می کنیم:

id آزاد در جدول - نتیجه

مشاهده می کنیم که یک ردیف جدید به جدولمان با id  1037  اضافه شد .

در این جلسه یکی از روش های پیدا کردن  id آزاد در جدول را آموزش دادیم ، در جلسه بعد قصد داریم تا شما  را با Stored-Procedure (استور پروسیجر) آشنا کنیم .

با  آموزش مبانی SQL Server در خدمت شما هستیم. لطفا سوالات ، نظرات و پیشنهادات خود را در قسمت دیدگاه ها با ما در میان بگذارید.

به این مقاله چند تا ستاره میدی؟
[تعداد رای: 5 امتیاز: 5]