50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

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

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

تا جایی که خاطرم هست همیشه عملگر OR اینطور عمل می کرد که اگر چند تا شرط داشتیم و ازون چند تا اولی درست بود دیگه سراغ بقیه شرط ها نمی رفت.

مشکل من از جایی شروع شد که روی یک جدول که چند میلیون رکورد داخلش هست کوئری زدم و دیدم بیش از اون چیزی که فکر میکردم طول میکشه.

بخشی از قسمت شرط کدم به شکل زیر هست:

Code
            (
                (
                    (
                        @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 چک می شه.

کویری را با ترتیب های مختلف برای شرطها چک کردم ولی به جوابی نرسیدم.

Code
DECLARE @flag BIT=0

DECLARE @i INT=1

SELECT
    *
FROM
    sys.all_columns
WHERE
    @flag         = 0
     OR OBJECT_ID > ( 1 / ( @i - 1 ) ) 

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

پرسیده شده در 1397/02/26 توسط
آواتار

4 پاسخ

1

چه and چه or :

همه شرط ها بررسی می شند ، حالا or نیاز به یک شرط صحیح داره ، And نیاز به همه

پاسخ در 1397/02/26 توسط
1

سلام

(چیزی که توی ذهن من بود اینه که موقعی که پارامتر ViewStatus مقدار Daily داشته باشه، قاعدتا نباید به قسمت دوم OR مراجعه کنه.)

چرا نباید این به قسمت دوم مراجعه کند

تعریف عمگر Or:

عمگر Or فقط نياز دارد که حداقل يکی از شرط ها درست باشد

شما دقیقا از کوئریتان چه خروجی می خواهید بگیرید (بهتر است ستونها را نام ببرید تا بهتر بشود کمک کرد)

پاسخ در 1397/02/26 توسط
1

فکر کنم این جمله درست باشه:

"همه شرط ها بررسی می شند ، حالا or نیاز به یک شرط صحیح داره ، And نیاز به همه "

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

ممنون از دوستان

پاسخ در 1397/02/29 توسط
آواتار
1

ضمنا فکر می کنم شما دارید یک تقسیم بر صفر هم انجام میدید ؟ نه ؟

Code
Msg 8134, Level 16, State 1, Line 5
Divide by zero error encountered.
پاسخ در 1397/02/26 توسط

پاسخ شما