Нөлдік өрістерді сақталатын рәсімде салыстыру

Сақталған процедурамен проблема туындады. Өзгерістерді тексеру үшін бар жаңа жазбаны салыстыру. Бұл келесідей:

SELECT 1 FROM Table
WHERE Id= @Id
AND Field1 = @Field1
AND Field2 = @Field2
AND Field3 = @Field3
AND Field4 = @Field4
AND Field5 = @Field5
AND LEDTS IS NULL

Бұл өрістер NULL болғанда сәтсіздікке ұқсайды. Мен білемін, NULL сіз күткендей жұмыс істемейді, бірақ мен ондай нәрселерде де сәтсіз болғанын білмедім. Мен далалық салыстыруды ұқсас заттарға ауыстырған кезде

(Field1 IS NULL AND Field2 IS NULL) OR Field1 = @Field2

ол жұмыс істейді. Мұны істеудің жақсы жолы бар ма?

1
Егер сіз кодты, xml немесе деректер үлгілерін жіберген болсаңыз, ӨТІНЕМІЗ мәтін өңдегішіндегі сол жолдарды бөлектеңіз және редактордың құралдар тақтасындағы «код үлгілері» батырмасын басыңыз ( {} ) Жақсы пішім және синтаксис оны бөлектейді!
қосылды автор marc_s, көзі
Мен сондай-ақ осы қызықтыруға мүдделі.
қосылды автор Valamas, көзі

3 жауаптар

Мынадай чектерді пайдалануға болады:

ISNULL(Field1, '') = ISNULL(@Field1, '')

Мұны істеуге болады: сіз теңдікке ие бола аласыз

NULL='' or ''=NULL

Мен сіздің сценарийіңізде қолайлы болатынын білмеймін.

2
қосылды
Егер бұл өнімділік мәселе болмаса, бұл жақсы, бірақ бұл сарбаздық емес.
қосылды автор HLGEM, көзі

SET ANSI_NULLS can control this behavior... Setting SET ANSI_NULLS OFF will make NULL = NULL evaluate to true.

Бірақ SET ANSI_NULLS OFF параметрін нақты орнатуды ұсынамын және оның орнына «nullable» дерекқордағы өрістерді шектеуге тырысыңыз.

2
қосылды
Рахмет. Өкінішке орай, null мүмкін өрістердің санын шектей алмаймын, сондықтан мен ANSI_NULLS параметрімен бірге барамын. Бірақ мен оны ақылмен қолдануға тырысамын;)
қосылды автор Jasper, көзі
@JoeStefanelli жақсы, бірақ сіз орнына тиісті тексеруді ұсынар едіңіз?
қосылды автор Jasper, көзі
Бұл қиын болса да, сіз жіберген салыстыру - NULL мәндерін тексерудің жақсы әдісі.
қосылды автор Michael Fredrickson, көзі
SET ANSI_NULLS OFF - бұл ескірген мүмкіндік .
қосылды автор Joe Stefanelli, көзі

Бұл әрекет ANSI_NULLS параметрімен реттеледі. Бұл кодты ON деп орнатады және әр түрлі әрекеттер дұрыс жұмыс істеуі үшін (мысалы, индекстелген көріністер және таратылған сұраулар) осы жолмен орнату керек, бірақ егер қажет болмаса, оны өшіруге болады.

Бұл туралы қосымша ақпаратты Books Online бөлімінен оқыңыз.

1
қосылды
Басқа жауапқа түсініктеме бергенімде SET ANSI_NULLS OFF - бұл ескірген функция , ол болашақта белгілі бір уақытта алынып тасталады.
қосылды автор Joe Stefanelli, көзі