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 utilizzano istruzioni Transact-SQL.

  • Sostituire tutte le occorrenze dei tipi di dati char, varchar e text con nchar, nvarchar e nvarchar(max). In questo modo non si verificano problemi a livello di conversione della tabella codici. Per ulteriori informazioni, vedere Utilizzo di dati Unicode e Programmazione sul lato server con Unicode.

  • 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" se la lingua impostata è l'inglese (Stati Uniti), "Mai" se è impostato il tedesco e "mai" se è impostato il francese. Specificare pertanto una funzione quale DATEPART che utilizza il numero anziché il 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'aaa-mm-gg**'}** ad esempio { d'1998-09-24**'}**

      { t'hh:mm:ss'} ad esempio { t'10:02:20'}

    • Nelle applicazioni che utilizzano altre API, oppure script, stored procedure e trigger di Transact-SQL, è necessario utilizzare le stringhe numeriche non separate, ad esempio yyyymmdd come 19980924.

    • Nelle applicazioni che utilizzano altre API oppure script, stored procedure e trigger di Transact-SQL è inoltre possibile utilizzare l'istruzione CONVERT con un parametro di stile esplicito per tutte le conversioni tra i tipi di dati time, date, smalldate, datetime, datetime2 e datetimeoffset e i dati di tipo 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 AdventureWorks2008R2.Sales.SalesOrderHeader
      WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)
      

      Per ulteriori informazioni, vedere CAST e CONVERT (Transact-SQL).

      Per ulteriori informazioni sulla portabilità dei formati di data e ora, vedere Utilizzo di dati relativi a data e ora.