چرا این ۳ دستور در کوئری های اسکیوال سرور مورد توجه قرار نمی گیرند!!!

بررسی تاثیر دستورات

SET ANSI_NULLS ON ،

SET QUOTED_IDENTIFIER ON و

SET NOCOUNT ON

روی کوئری ها



دستورات SET ANSI_NULLS ON ، SET QUOTED_IDENTIFIER ON و SET NOCOUNT ON برای همه شما بسیار آشنا هستند. این دستورات را زمانی که می خواهید یک Stored Procedure ، Trigger یا تابع ایجاد کنید، بارها و بارها دیده اید و از کنار آنها گذشته باشید. اما بهتر است بدانید اجرای همین دستورات می تواند تاثیر بسیار زیادی در اجرای کوئری های شما مخصوصا در Stored Procedureها و Trigger ها داشته باشد دوستانی که در بسته ۵ آشامیدنی SQL Server با ما همراه بوده اند به خوبی به این امر واقف هستند که در زمان طراحی Stored Procedure ها و Trigger ها دانستن این نکات چقدر می تواند ارزشمند باشد. در این مقاله تاثیر سه دستور SET ANSI_NULLS ON ،SET QUOTED_IDENTIFIER ON و SET NOCOUNT ON را روی کوئری ها بررسی خواهیم کرد.

کار خود را با بررسی دستور SET ANSI_NULLS ON آغاز می کنیم . در صورتی که مقدار این دستور برابر با ON باشد امکان بررسی مقادیر تهی تنها از طریق عملگر های IS و IS NOT فراهم می شود و در صورتی که مقدار OFF داشته باشد امکان بررسی مقادیر NULL از طریق عملگر های مقایسه ای مانند = نیز فراهم می شود.
برای اینکه تاثیر این دستور را بهتر بدانید ابتدا دستور زیر را روی بانک اطلاعاتی AdventureWorks2012 اجرا کنید :



SET ANSI_NULLS OFF

select * from Person.Person

where Title = null

select * from Person.Person

where Title <> null



نتیجه اجرا به صورت زیر خواهد بود :





حال دستورات زیر را اجرا کنید :


SET ANSI_NULLS ON

select * from Person.Person where Title = null

select * from Person.Person where Title <> null

select * from Person.Person where Title is null

select * from Person.Person where Title is not null








بررسی دستور SET QUOTED_IDENTIFIER ON

با توجه به ON یا OFF بودن مقدار این عبارت SQL Server نسبت به داده‌هایی که درون دابل کوتیشن (“) یا کوتیشن (‘) قرار دارند، به‌طور متفاوتی رفتار می‌کند. درصورتی‌که مقدار این عبارت برابر با ON باشد، آنگاه SQL Server با مقادیری که درون دابل کوتیشن قرار دارند، به‌عنوان شناسه رفتار می‌کند. در این صورت حتی می‌توان از کلمات رزرو شده‌ی T-SQL به‌عنوان شناسه استفاده نمود. بنابراین می‌توان از این شناسه‌ها، با استفاده از دابل کوتیشن به‌عنوان نام روال ذخیره‌شده و غیره استفاده کرد. برای درک بهتر به دو مثالی که در ادامه می‌آیند توجه کنید.
در دستور زیر مقدار OFF برای دستور SET QUOTED_IDENTIFIER قرار داده شده و پس از آن تلاش می کنیم جدولی با نام Table که دارای ستونی به نام Function است را ایجاد کنیم :


SET QUOTED_IDENTIFIER OFF

CREATE TABLE “Table”(id int,”Function” VARCHAR(20))

۱



با خطای زیر مواجه خواهیم شد :





اما با قرار دادن مقدار ON برای SET QUOTED_IDENTIFIER جدولی که تلاش کردیم در دستور قبلی ایجاد کنیم به راحتی ساخته خواهد شد :



SET QUOTED_IDENTIFIER ON

CREATE TABLE “Table”(id int,”Function” VARCHAR(20))









دستور SET NOCOUNT ON

در صورتی که مقدار OFF را برای این دستور قرار دهید تعداد ردیف هایی که تحت تاثر دستور قرار گرفته اند را نمایش میدهد.

اگر از یک دستور Select استفاده می‌کنید که ۱۰ رکورد را برمی‌گرداند، پس از اجرای دستورات در قسمت Message پیغام ۱۰ row(s) affected را مشاهده خواهید کرد این در حالی است که اگر از دستور SET NOCOUNT ON استفاده کنید، پیغام Command(s) completed successfully را مشاهده خواهید کرد. این اطلاعات هنگامی‌که در حال دیباگ کردن برنامه هستید مفید است. پس از آن، در بسیاری از موارد، این اطلاعات بی‌فایده هستند. با ON و OFF کردن این دستور می تواند بدست آوردن این اطلاعات اضافه را تایید یا لغو کنید.
دستورات زیر را اجرا کنید. بخش Message مربوط پنل نتایج به صورت زیر خواهد بود :


SET NOCOUNT OFF

select * from Person.Person






و با تغییر مقدار این دستور به ON . بخش Message مربوط پنل نتایج به صورت زیر تغییر خواهد کرد:



SET NOCOUNT ON

select * from Person.Person






درباره نویسنده

مطالب مرتبط

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دانلود رایگان
فایل ویدئویی خاطرات نرم افزارهای 14 سال قبل استاد مدحج + پروژه عظیم کدهای سایت کد تجاری
دانلود رایگان
فایل صوتی راز کیفیت محصولات اپل با شی گرا
دانلود رایگان
مالکیت فکری نرم افزار در داخل تیم تولید و خارج از آن
دانلود رایگان
نگاه شی گرا با استفاده از مکانیزم طبیعی ذهن در تولید نرم افزار
دانلود رایگان
گزارش سازی با linqtosql و stimulsoft
در حال بروزرسانی سایت هستیم بابت اینکه جهت انجام تغییرات صبور هستید سپاسگزاریم
دانلود رایگان
مالکیت فکری نرم افزار در داخل تیم تولید و خارج از آن