Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

ANSI_NULLS e QUOTED_IDENTIFIER hanno ucciso cose. A cosa servono?

OK, dal punto di vista di uno sviluppatore di applicazioni, ecco cosa fanno queste impostazioni:

QUOTED_IDENTIFIER

Questa impostazione controlla come le virgolette ".." vengono interpretati dal compilatore SQL. Quando QUOTED_IDENTIFIER è ON, le virgolette vengono trattate come parentesi quadre ([...] ) e può essere utilizzato per citare nomi di oggetti SQL come nomi di tabelle, nomi di colonne, ecc. Quando è OFF (non consigliato), le virgolette vengono trattate come apostrofi ('..' ) e può essere utilizzato per citare stringhe di testo nei comandi SQL.

ANSI_NULLS

Questa impostazione controlla cosa succede quando tenti di utilizzare qualsiasi operatore di confronto diverso da IS su NULLO. Quando è ON, questi confronti seguono lo standard che dice che il confronto con NULL fallisce sempre (perché non è un valore, è un flag) e restituisce FALSE . Quando questa impostazione è OFF (davvero non consigliato) puoi trattarlo con successo come un valore e utilizzare = , <> , ecc. su di esso e torna TRUE come appropriato.

Il modo corretto per gestirlo è invece utilizzare IS (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL

Questa impostazione controlla se i NULL vengono "propagati" quando vengono utilizzati nelle espressioni di stringa. Quando questa impostazione è ON, segue lo standard e un'espressione come 'some string' + NULL .. restituisce sempre NULL. Pertanto, in una serie di concatenazioni di stringhe, un NULL può far sì che l'intera espressione restituisca NULL. Disattivandolo (anche non consigliato) i NULL verranno trattati come stringhe vuote, quindi 'some string' + NULL restituisce solo 'some string' .

Il modo corretto per gestirlo è con la funzione COALESCE (o ISNULL):'some string' + COALESCE(NULL, '') .. .