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

L'operatore LIKE fa distinzione tra maiuscole e minuscole con MSSQL Server?

Non è l'operatore che fa distinzione tra maiuscole e minuscole, è la colonna stessa.

Quando viene eseguita un'installazione di SQL Server, vengono scelte regole di confronto predefinite per l'istanza. Se non diversamente indicato in modo esplicito (controlla la clausola di confronto di seguito) quando viene creato un nuovo database, eredita le regole di confronto dall'istanza e quando viene creata una nuova colonna eredita le regole di confronto dal database a cui appartiene.

Un confronto come sql_latin1_general_cp1_ci_as determina come deve essere trattato il contenuto della colonna. CI sta per case insensitive e AS sta per accent sensitive.

Un elenco completo delle regole di confronto è disponibile su https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx

(a) Per controllare le regole di confronto di un'istanza

select serverproperty('collation')

(b) Per controllare le regole di confronto di un database

select databasepropertyex('databasename', 'collation') sqlcollation

(c) Per creare un database utilizzando un confronto diverso

create database exampledatabase
collate sql_latin1_general_cp1_cs_as 

(d) Per creare una colonna utilizzando un confronto diverso

create table exampletable (
    examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null
)

(e) Per modificare le regole di confronto di una colonna

alter table exampletable
alter column examplecolumn varchar(10) collate sql_latin1_general_cp1_ci_as null

È possibile modificare un'istanza e le regole di confronto del database, ma ciò non influisce sugli oggetti creati in precedenza.

È anche possibile modificare al volo le regole di confronto delle colonne per il confronto delle stringhe, ma questo è altamente sconsigliato in un ambiente di produzione perché è estremamente costoso.

select
  column1 collate sql_latin1_general_cp1_ci_as as column1
from table1