Scrittura di istruzioni Transact-SQL internazionali
Le linee guida seguenti consentono di aumentare il grado di portabilità tra lingue diverse, nonché il supporto di più lingue, per i database e le applicazioni di database che usano istruzioni Transact-SQL:
Sostituire tutte le occorrenze dei tipi di dati
char
,varchar
etext
connchar
,nvarchar
envarchar(max)
. In questo modo non si verificano problemi a livello di conversione della tabella codici. Per ulteriori informazioni, vedi Supporto per Unicode e regole di confronto.Quando si eseguono confronti e operazioni con mesi o giorni della settimana, utilizzare le parti numeriche della data anziché le stringhe di nomi. I nomi dei mesi e dei giorni della settimana restituiti variano a seconda dell'impostazione della lingua. Ad esempio, DATENAME (MONTH,GETDATE()) restituisce May quando la lingua è impostata sull'inglese (Stati Uniti) Mai se è impostato il tedesco e mai se è impostato il francese. Specificare quindi una funzione quale DATEPART che usa il numero invece del nome del mese. Utilizzare i nomi DATEPART quando si compilano i set di risultati da visualizzare all'utente, in quanto le stringhe di nomi sono più significative delle parti numeriche. Non creare tuttavia il codice di logica che dipende dai nomi visualizzati di una lingua specifica.
Quando si specificano le date nei confronti o nell'input di istruzioni INSERT e UPDATE, utilizzare costanti che vengono interpretate nello stesso modo indipendentemente dall'impostazione della lingua:
Le applicazioni ADO, OLE DB e ODBC devono utilizzare le clausole di escape seguenti relative a timestamp, data e ora:
{ ts'aaaa- mm-gghh:mm:ss[.fff] '} ad esempio: { ts'1998- 09-24 10**:02:20' }**
{ d' Aaaa - mm - gg '} ad esempio: { d'1998- 09-24**'}**
{ t' hh : mm : ss '} ad esempio: { t'10:02:20'}
Nelle applicazioni che usano altre API, oppure script, stored procedure e trigger di Transact-SQL, è necessario usare le stringhe numeriche non separate. Ad esempio, aaaammgg come 19980924.
Le applicazioni che usano altre API o script Transact-SQL, stored procedure e trigger devono usare l'istruzione CONVERT con un parametro di stile esplicito per tutte le conversioni tra i
time
tipi di dati ,date
smalldate
, ,datetime
, datetime2 edatetimeoffset
i tipi di dati stringa di caratteri. L'istruzione seguente viene interpretata nello stesso modo indipendentemente dalle impostazioni di connessione della lingua o del formato della data:SELECT * FROM AdventureWorks2012.Sales.SalesOrderHeader WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)
Per altre informazioni, vedere CAST e CONVERT (Transact-SQL).