سلام خدمت همه اساتید.
تا جایی که خاطرم هست همیشه عملگر OR اینطور عمل می کرد که اگر چند تا شرط داشتیم و ازون چند تا اولی درست بود دیگه سراغ بقیه شرط ها نمی رفت.
مشکل من از جایی شروع شد که روی یک جدول که چند میلیون رکورد داخلش هست کوئری زدم و دیدم بیش از اون چیزی که فکر میکردم طول میکشه.
بخشی از قسمت شرط کدم به شکل زیر هست:
( ( ( @ViewStatus = 'Daily' ) AND PassDateTime Between @FromDateTime And @ToDateTime ) OR ( @ViewStatus = 'Hourly' AND PassDate >= @FDate AND PassDate <= @TDate AND PassTime >= @FTime AND PassTime <= @TTime ) )
چیزی که توی ذهن من بود اینه که موقعی که پارامتر ViewStatus مقدار Daily داشته باشه، قاعدتا نباید به قسمت دوم OR مراجعه کنه. (اگه اشتباه میگم راهنماییم کنید لطفا)
ولی با تست هایی که انجام دادم مطمین شدم که به اون بخش هم مراجعه می کنه.
برای تست خودم تکه کد زیر را اجرا کردم. توی این تکه کد هم هر دو قسمت OR چک می شه.
کویری را با ترتیب های مختلف برای شرطها چک کردم ولی به جوابی نرسیدم.
DECLARE @flag BIT=0 DECLARE @i INT=1 SELECT * FROM sys.all_columns WHERE @flag = 0 OR OBJECT_ID > ( 1 / ( @i - 1 ) )
از دوستان کسی هست که بهم توضیح بده کجا رو اشتباه میکنم؟
این پست در تاریخ {{ dateString(new Date(post.deleteDate)) }} توسط {{ post.deletedByUser }} حذف شده است.
دلیل حذف: {{ post.deleteReason ?? 'نامشخص' }}
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود