sql >> Databasteknik >  >> RDS >> Sqlserver

ANSI_NULLS och QUOTED_IDENTIFIER dödade saker. Vad är de till för?

OK, ur en applikationsutvecklares synvinkel, så här gör dessa inställningar:

QUOTED_IDENTIFIER

Den här inställningen styr hur citattecken ".." tolkas av SQL-kompilatorn. När QUOTED_IDENTIFIER är PÅ behandlas citattecken som hakparenteser ([...] ) och kan användas för att citera SQL-objektnamn som tabellnamn, kolumnnamn etc. När den är AV (rekommenderas inte), behandlas citattecken som apostrof ('..' ) och kan användas för att citera textsträngar i SQL-kommandon.

ANSI_NULLS

Den här inställningen styr vad som händer när du försöker använda någon annan jämförelseoperator än IS på NULL. När den är PÅ följer dessa jämförelser standarden som säger att jämförelse med NULL alltid misslyckas (eftersom det inte är ett värde, det är en flagga) och returnerar FALSE . När den här inställningen är AV (verkligen inte rekommenderas) kan du framgångsrikt behandla det som ett värde och använda = , <> , etc. på den och få tillbaka TRUE som lämpligt.

Det korrekta sättet att hantera detta är att istället använda IS (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Den här inställningen styr om NULLs "Propogate" används i stränguttryck. När den här inställningen är PÅ följer den standarden och ett uttryck som 'någon sträng' + NULL .. returnerar alltid NULL. Således, i en serie av strängsammansättningar, kan en NULL få hela uttrycket att returnera NULL. Om du stänger AV (även, rekommenderas inte) kommer NULL:erna att behandlas som tomma strängar istället, så 'någon sträng' + NULL utvärderas bara till 'någon sträng' .

Det korrekta sättet att hantera detta är med funktionen COALESCE (eller ISNULL):'någon sträng' + COALESCE(NULL, '') .. .



  1. Lagra och indexera YAML med PostgreSQL, med Javascript lib eller återanvändbara funktioner?

  2. Är XPath summa- eller fn:sum-funktionen implementerad i PostgreSQL XPath?

  3. Oracle SQL - Konvertera rader till kolumner dynamiskt

  4. SQL-sats att välja mellan två olika tabeller, från två olika databaser (samma server)