مشکل با عملگر OR در SQL Server!!!

بپرسید
  • ym3015 ym3015
  • 71 ماه قبل
  • 71 ماه قبل
  • 498 نمایش

0

{{ digitTrunc(content.likes) }}

سلام خدمت همه اساتید.

تا جایی که خاطرم هست همیشه عملگر 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 ) ) 

از دوستان کسی هست که بهم توضیح بده کجا رو اشتباه میکنم؟

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

پاسخ ها به این سوال

پاسخ ها به این سوال

{{ digitTrunc(post.likes) }}

این پست در تاریخ {{ dateString(new Date(post.deleteDate)) }} توسط {{ post.deletedByUser }} حذف شده است.

دلیل حذف: {{ post.deleteReason ?? 'نامشخص' }}

{{ err }}
{{ post.userAchivements.rhodiumAchievements }}
{{ post.userAchivements.platinumAchievements }}
{{ post.userAchivements.goldAchievements }}
{{ post.userAchivements.silverAchievements }}
{{ post.userAchivements.bronzeAchievements }}
{{ timeSince(new Date(post.date)) }} قبل

برای ثبت پاسخ خود در وب سایت وارد حساب کاربری خود شوید
قابلیت ارسال مطلب توسط مدیریت سایت غیر فعال شده است