Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

ANSI_NULLS e QUOTED_IDENTIFIER mataram coisas. Para que servem?


OK, do ponto de vista de um desenvolvedor de aplicativos, veja o que essas configurações fazem:

QUOTED_IDENTIFIER


Esta configuração controla como as aspas ".." são interpretados pelo compilador SQL. Quando QUOTED_IDENTIFIER está ON então as aspas são tratadas como colchetes ([...] ) e pode ser usado para citar nomes de objetos SQL como nomes de tabelas, nomes de colunas, etc. Quando está DESLIGADO (não recomendado), as aspas são tratadas como apóstrofos ('..' ) e pode ser usado para citar strings de texto em comandos SQL.

ANSI_NULLS


Esta configuração controla o que acontece quando você tenta usar qualquer operador de comparação diferente de IS em NULO. Quando está ON, essas comparações seguem o padrão que diz que comparar com NULL sempre falha (porque não é um valor, é um Flag) e retorna FALSE . Quando esta configuração está DESATIVADA (realmente não recomendado) você pode tratá-lo com sucesso como um valor e usar = , <> , etc. nele e receba de volta TRUE conforme apropriado.

A maneira correta de lidar com isso é usar o IS (ColumnValue IS NULL .. ).

CONCAT_NULL_YIELDS_NULL


Esta configuração controla se NULLs "Propogar" quando usados ​​em expressões de string. Quando esta configuração está ON, segue o padrão e uma expressão como 'some string' + NULL .. sempre retorna NULL. Assim, em uma série de concatenações de strings, um NULL pode fazer com que toda a expressão retorne NULL. Desativar isso (também não recomendado) fará com que os NULLs sejam tratados como strings vazias, então 'some string' + NULL apenas avalia para 'some string' .

A maneira correta de lidar com isso é com a função COALESCE (ou ISNULL):'some string' + COALESCE(NULL, '') .. .