sql >> Database >  >> RDS >> Sqlserver

ANSI_NULLS en QUOTED_IDENTIFIER hebben dingen vermoord. Waar zijn die voor?

OK, vanuit het oogpunt van een applicatieontwikkelaar doen deze instellingen het volgende:

QUOTED_IDENTIFIER

Deze instelling bepaalt hoe aanhalingstekens ".." worden geïnterpreteerd door de SQL-compiler. Wanneer QUOTED_IDENTIFIER is AAN, dan worden aanhalingstekens behandeld als haakjes ([...] ) en kan worden gebruikt om namen van SQL-objecten aan te halen, zoals tabelnamen, kolomnamen, enz. Als het UIT is (niet aanbevolen), worden aanhalingstekens behandeld als apostrofs ('..' ) en kan worden gebruikt om tekstreeksen in SQL-opdrachten te citeren.

ANSI_NULLS

Deze instelling bepaalt wat er gebeurt als je een andere vergelijkingsoperator probeert te gebruiken dan IS op NUL. Als het AAN is, volgen deze vergelijkingen de standaard die zegt dat vergelijken met NULL altijd mislukt (omdat het geen waarde is, het is een vlag) en retourneert FALSE . Als deze instelling UIT staat (echt niet aanbevolen) kunt u het met succes als een waarde behandelen en = . gebruiken , <> , enz. erop en krijg zo nodig TRUE terug.

De juiste manier om dit aan te pakken is om in plaats daarvan de IS . te gebruiken (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Deze instelling bepaalt of NULL's "Propogate" worden gebruikt in tekenreeksexpressies. Als deze instelling AAN is, volgt deze de standaard en een uitdrukking zoals 'some string' + NULL .. geeft altijd NULL terug. In een reeks aaneenschakelingen van tekenreeksen kan één NULL er dus voor zorgen dat de hele expressie NULL retourneert. Als u dit UITschakelt (ook niet aanbevolen), worden de NULL's in plaats daarvan behandeld als lege tekenreeksen, dus 'some string' + NULL evalueert gewoon naar 'some string' .

De juiste manier om dit aan te pakken is met de COALESCE (of ISNULL) functie:'some string' + COALESCE(NULL, '') .. .



  1. Hoe de SOUNDS LIKE-operator werkt in MySQL

  2. Hoe .sql-bestand uit te voeren met powershell?

  3. Hoe maak ik een INTERSECT met Eloquent Builder zonder een verzameling te hebben?

  4. Kan MySQL meerdere indexen gebruiken voor een enkele query?