سبد (0)

قرار دادن صفر در سمت چپ اعداد

صفر در سمت چپ یک عدد

جدول Products را در زیر داریم:

Prod_Id ProductName Unit UnitPrice
00001 Jarlsberg 1000 g 120000
00002 Mascarpone 1000 g 9505000
00003 Gorgonzola 1000 g 60200000

می خواهیم هنگام درج کردن محصولات، کد محصول همیشه، شامل 5 کاراکتر باشد.

از کوئری زیر استفاده می کنیم:

declare @max_ID char(5)
select @max_ID=right(
                     Replicate('0',5)+
                                       cast(
                                            isnull(
                                                   max(
                                                       cast(Prod_ID as int)
                                                       )
                                                   ,0
                                                   )
                                                   +1
                                             as nvarchar
                                            )
                      ,5
                      )
from Products
Insert into Products (prod_ID,ProductName,Unit,UnitPrice)
               Values(@max_ID,'Test','1000g',250000)

توجه: استفاده ازنوع داده های رشته ای به عنوان اندیس یا  کلید اصلی، یک اشتباه در طراحی است.

توضیح: نوع داده varchar و هر نوع داده کاراکتری یا رشته ای بدترین نوع انتخاب برای اندیس جدول است. این اشتباه زمانی بدتر خواهد شد که از این فیلد به عنوان کلید اصلی نیز استفاده کنید؛ و سرانجام اشتباه با استفاده از این کلید به عنوان کلید خارجی تکمیل خواهد شد!

البته توجه داشته باشید که استفاده از فیلد اندیس کاراکتری در کنار کلید اصلی مشکل خاصی نخواهد داشت. فقط این مورد در صروت لزوم و زمانی که از آن فیلد به کرات برای جستجو استفاده می کنید مورد استفاده قرار دهید.

علت اشتباه بودن این انتخاب در ساخت جدول اندیس و تعداد مقایسه های انجام شده بر می گردد. به عنوان یک مثال ساده مقایسه، دو نوع عددی می توانند به راحتی توسط دستور عمل های CPU با یکدیگر مقایسه شوند، در حالی که درنوع کارکتری باید تک تک کارکاتر ها با استفاده از شبیه سازی نرم افزاری مقایسه شوند. در رشته های یونیکد هم که حجم کاراکتر ها دو برابر می شوند.

راه حل: راه حل بسیار ساده استفاده از انواع داده عددی مانند int یا bigint به عنوان کلید اصلی است. در عین حال می توانید در صورت نیاز از فیلد استفاده شده در مثال بالا نیز به عنوان یک فیلد اطلاعاتی نیز استفاده نمایید.

بنابراین:

Prod_ID Prod_Code ProductName Unit UnitPrice
1 00001 Jarlsberg 1000 g 120000
2 00002 Mascarpone 1000 g 9505000
3 00003 Gorgonzola 1000 g 60200000

برای مشاهده فیلم های آموزشی مقدماتی تا پیشرفته پایگاه داده SQLServer کلیک کنید.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه