Le regole di confronto sqlserver indicano che i nomi delle colonne devono essere il caso corretto? E come affrontarlo

StackOverflow https://stackoverflow.com/questions/496628

Domanda

In SQL Server (2000 o 2005) è possibile impostare le regole di confronto del database o del server in modo che i nomi degli identificatori (tabelle, colonne, ecc.) debbano essere nel caso corretto? In tal caso, è vero per tutte le regole di confronto sensibili al maiuscolo / minuscolo o è un'impostazione separata? (Ho sempre pensato alla distinzione tra maiuscole e minuscole che si applica ai dati, non ai nomi degli oggetti).

Presumibilmente questo romperebbe un'applicazione se i suoi processi e query memorizzati non fossero scritti con un caso coerente? Esiste un modo per gestirlo senza dover garantire che tutte le query utilizzino il caso corretto, come l'impostazione del confronto di una connessione al database?

Sto guardando questo dal punto di vista di avere un'applicazione esistente che probabilmente ha incoerentemente inserito il codice sql in esso, e voglio essere in grado di eseguirlo su database con regole di confronto diverse. Di quali impostazioni avrei bisogno o con quali set di regole di confronto database / server non posso utilizzare l'applicazione?

È stato utile?

Soluzione

Le regole di confronto sono ciò che determina se le query non fanno distinzione tra maiuscole e minuscole. Quindi l'unico modo per garantire che il tuo schema funzionerà su più ambienti è far sì che le tue query facciano distinzione tra maiuscole e minuscole. Se le tue query non sono coerenti, le regole di confronto DEVONO essere insensibili alle maiuscole, altrimenti non funzioneranno.

http://msdn.microsoft.com/ it-it / library / aa174903 (SQL.80) .aspx

Una cosa da notare è che una volta impostato l'ambiente SQL Server con un determinato confronto, NON PUOI cambiarlo senza creare una NUOVA istanza di SQL Server. Quindi la distinzione tra maiuscole e minuscole è generalmente la strada da percorrere. E poi cerca di avere coerenza nelle tue domande.

Una volta impostato un confronto, questo si applica sia ai dati che ai metadati, credo.

Altri suggerimenti

Le regole di confronto sono impostate nelle versioni precedenti di SQL Server, ma nel 2005 e oltre, è possibile modificarle per oggetto, man mano che vengono create.

Le regole di confronto predefinite del database determinano se gli oggetti all'interno del database vengono trattati con distinzione tra maiuscole e minuscole nelle query: ciò vale per tutto il nome dell'oggetto: tabelle, colonne, ecc.

Se il codice dell'applicazione proviene da un database di confronto senza distinzione tra maiuscole e minuscole, potrebbe non essere eseguito su un database di confronto sensibile al maiuscolo / minuscolo se un oggetto viene segnalato in modo errato (si otterrebbe un messaggio quando si tenta di eseguire l'istruzione o creare la procedura memorizzata , o in un'architettura proc-stored, le prenderesti abbastanza rapidamente a meno che non avessi una quantità significativa di SQL dinamico).

Ricorda che anche se il tuo codice viene eseguito, le singole colonne possono essere impostate con regole di confronto diverse dal database, quindi è sempre possibile che con regole di confronto diverse il codice si comporti in modo imprevisto (ad esempio, GROUP BY si comporta in modo diverso).

È possibile impostare regole di confronto per ciascun oggetto e impostare un valore predefinito anche per il database e il server.

Come gestirlo? È necessario applicare gli standard qui. Puoi facilmente rimanere impigliato con persone diverse che scrivono con casi diversi.

Le regole di confronto si applicano anche ai dati, quindi " bob " ! = " Bob "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top