به دست آوردن آدرس id آزاد در جدول
با نام و یاد خداوند. سلام خدمت کاربران گرامی
در جلسه قبل شما را با حلقه while در sql آشنا کردیم، تا در این جلسه با استفاده از همین دستور آدرس id آزاد در جدول مان را پیدا کنیم.
یک جدول به نام Student داشتیم . ابتدا با استفاده از دستور select اطلاعات جداول را مشاهده می کنیم:
select *
from Student
خروجی جدول student:
اگر به جدول نگاه کنید متوجه می شوید که شروع مقدار 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 می زنیم .
ستون 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 با مقدار 1035 را پیدا کرده است و با دستور insert ی که نوشته ایم یک ردیف به جدول اضافه شده است .
جدول student را مشاهده می کنیم تا ببینیم که آیا رکوردی با id 1035 به جدولمان اضافه شده است یا نه ؟
بله مشاهده می کنیم که یک ردیف ، با 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)
یکبار دیگر جدول student را با هم مشاهده می کنیم:
مشاهده می کنیم که یک ردیف جدید به جدولمان با id 1037 اضافه شد .
در این جلسه یکی از روش های پیدا کردن id آزاد در جدول را آموزش دادیم ، در جلسه بعد قصد داریم تا شما را با Stored-Procedure (استور پروسیجر) آشنا کنیم .
با آموزش مبانی SQL Server در خدمت شما هستیم. لطفا سوالات ، نظرات و پیشنهادات خود را در قسمت دیدگاه ها با ما در میان بگذارید.
به این مقاله چند تا ستاره میدی؟[تعداد رای: 5 امتیاز: 5]
عالی بودن
میشه ادامه شو بذارید
سلام ادامش رو لطف میکنید