Gravar instruções Transact-SQL internacionais

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

Os bancos de dados e aplicativos de bancos de dados que usarem instruções Transact-SQL se tornarão mais portáteis de uma linguagem de programação para outra ou darão suporte a várias linguagens, se as diretrizes a seguir forem cumpridas:

  • A partir do SQL Server 2019 (15.x) e no Banco de Dados SQL do Azure, use:

    • Os tipos de dados char, varchar e varchar (max) com uma ordenação habilitada para UTF-8 e os dados são codificados usando o UTF-8.
    • Os tipos de dados nchar, nvarchar e nvarchar(max) com a ordenação habilitada para SC (caractere suplementar) e os dados são codificados usando UTF-16. O uso de uma ordenação não SC resulta na codificação de dados usando o UCS-2.

    Isso evita problemas de conversão de página de código. Para acessar outras considerações, confira Diferenças de armazenamento entre UTF-8 e UTF-16.

  • Até o SQL Server 2017 (14.x), substitua todos os usos dos tipos de dados char, varchar e varchar(max) comnchar, nvarchar e nvarchar(max). Se você estiver usando uma ordenação habilitada para SC (caractere suplementar), os dados serão codificados usando UTF-16. O uso de uma ordenação não SC resulta na codificação de dados usando o UCS-2. Isso evita problemas de conversão de página de código. Para obter mais informações, consulte Suporte a ordenações e a Unicode.

    Importante

    O tipo de dados texto foi preterido e não deve ser usado em novos trabalhos de desenvolvimento. Planeje converter dados de texto em varchar(max).

  • Ao realizar comparações e operações de mês e dia da semana, use as partes de data numérica em vez de cadeias de caracteres de nomes. Configurações de linguagem diferentes retornam nomes diferentes para os meses e dias de semana. Por exemplo, DATENAME(MONTH,GETDATE()) retorna May quando o idioma é definido como inglês dos EUA, retorna Mai quando o idioma é definido como alemão e retorna mai quando o idioma é definido como francês. No lugar, use uma função como DATEPART que usa o número do mês ao invés do nome. Use os nomes DATEPART quando for construir conjuntos de resultados a serem exibidos a um usuário, pois os nomes de datas geralmente são mais significativos que uma representação numérica. Porém, não codifique nenhuma lógica que dependa dos nomes exibidos sendo modificados em um idioma específico.

  • Quando especificar datas em comparações ou para entradas nas instruções INSERT ou UPDATE, use as constantes que são interpretadas da mesma maneira de todas as definições de linguagem:

    • Os aplicativos ODBC, ADO e OLE DB devem usar as cláusulas de fuga ODBC timestamp, data e hora para:

      { ts'yyyy-mm-ddhh:mm:ss [.fff] '} como: { ts'1998-09-24 10:02:20'}

      { d'yyyy-mm-dd'} como: { d'1998-09-24'}

      { t'hh:mm:ss'} como: { t'10:02:20'}

    • Os aplicativos que usam outras APIs ou scripts Transact-SQL, procedimentos armazenados e gatilhos, devem usar as sequências numéricas de não separadas. Por exemplo, yyyymmdd como 19980924.

    • Os aplicativos que usam outras APIs ou que usam scripts Transact-SQL, procedimentos armazenados e gatilhos devem usar a instrução CONVERT com um parâmetro de estilo explícito para todas as conversões entre os tipos de dados time, date, smalldate, datetime, datetime2, e datetimeoffset e os tipos de dados da cadeia de caracteres. Por exemplo, a instrução a seguir é interpretada da mesma maneira para todas configurações de conexão de formato de data ou de linguagem:

      SELECT *  
      FROM AdventureWorks2022.Sales.SalesOrderHeader  
      WHERE OrderDate = CONVERT(DATETIME, '20060719', 101)  
      

Confira também

CAST e CONVERT (Transact-SQL)
DATEPART (Transact-SQL)
Suporte a ordenações e a Unicode