इसका मतलब है कि यदि कोई भी पंक्ति अगर लौटा दी जाएगी @region
है NULL
जब अपने पहले उदाहरण में प्रयुक्त भले ही मेज जहां में पंक्तियों कर रहे हैं, Region
है NULL
।
जब ANSI_NULLS
चालू हो (जिसे आपको हमेशा किसी भी तरह सेट करना चाहिए, क्योंकि यह नहीं होने का विकल्प भविष्य में हटा दिया जाएगा), कोई भी तुलनात्मक ऑपरेशन जहां (कम से कम) एक ऑपरेंड में NULL
से तीसरा लॉजिक मान उत्पन्न होता है - UNKNOWN
( के रूप में विरोध किया TRUE
और FALSE
)।
UNKNOWN
मान किसी भी बूलियन ऑपरेटरों के माध्यम से प्रचारित करते हैं यदि वे पहले से तय नहीं किए जाते हैं (जैसे AND
एक FALSE
ऑपरेंड के OR
साथ या एक TRUE
ऑपरेंड के साथ ) या नकारात्मक ( NOT
)।
WHERE
खंड फिल्टर करने के लिए परिणाम सेट द्वारा उत्पादित किया जाता है FROM
खंड, ऐसा है कि के कुल मूल्य WHERE
खंड होना चाहिए TRUE
पंक्ति के लिए फिल्टर नहीं किया जा करने के लिए। इसलिए, यदि कोई UNKNOWN
किसी तुलना द्वारा निर्मित होता है , तो यह पंक्ति को फ़िल्टर करने का कारण बनेगा।
@ user1227804 के उत्तर में यह उद्धरण शामिल है:
यदि तुलना के दोनों किनारे स्तंभ या यौगिक अभिव्यक्ति हैं, तो सेटिंग तुलना को प्रभावित नहीं करती है।
से *SET ANSI_NULLS
हालाँकि, मुझे यकीन नहीं है कि यह किस बिंदु को बनाने की कोशिश कर रहा है, क्योंकि अगर दो NULL
स्तंभों की तुलना की जाती है (उदाहरण के लिए JOIN
), तो तुलना अभी भी विफल रहती है:
create table
ID int not null,
Val1 varchar(10) null
)
insert into
create table
ID int not null,
Val1 varchar(10) null
)
insert into
select * from
उपरोक्त क्वेरी 0 पंक्तियों को लौटाती है, जबकि:
select * from
एक पंक्ति लौटाता है। तो जब दोनों ऑपरेंड कॉलम होते हैं, तब NULL
भी नहीं के बराबर होता है NULL
। और ऑपरेंड के बारे में कहने के लिए प्रलेखन के=
पास कुछ भी नहीं है:
जब आप दो NULL
अभिव्यक्तियों की तुलना करते हैं, तो परिणाम ANSI_NULLS
सेटिंग पर निर्भर करता है :
यदि ANSI_NULLS
सेट किया गया है ON
, तो एएनएसआई सम्मेलन के बाद परिणाम NULL
1 है , जो कि NULL
(या अज्ञात) मूल्य दूसरे NULL
या अज्ञात मूल्य के बराबर नहीं है ।
यदि ANSI_NULLS
निर्धारित किया जाता है OFF
, तो NULL
तुलना की जाती NULL
है TRUE
।
NULL
एक गैर- NULL
मूल्य की तुलना में हमेशा FALSE
2 का परिणाम होता है ।
हालांकि, 1 और 2 दोनों गलत हैं - दोनों तुलनाओं का परिणाम है UNKNOWN
।
* इस पाठ का गूढ़ अर्थ अंततः वर्षों बाद खोजा गया था। वास्तव में इसका क्या मतलब है, उन तुलनाओं के लिए, सेटिंग का कोई प्रभाव नहीं है और यह हमेशा कार्य करता है जैसे कि सेटिंग चालू थी । स्पष्ट होगा यदि यह कहा SET ANSI_NULLS OFF
गया था कि सेटिंग थी जिसका कोई प्रभाव नहीं था।