Escribir instrucciones Transact-SQL internacionales

Las bases de datos y las aplicaciones de bases de datos que utilizan instrucciones Transact-SQL obtendrán una mayor portabilidad de un idioma a otro, o admitirán varios idiomas, si se siguen estas directrices:

  • Reemplace todos los tipos de datos char, varchar y text con nchar, nvarchar y nvarchar(max) respectivamente. De esta forma, se evita problemas de conversión de páginas de códigos. Para obtener más información, vea Compatibilidad con la intercalación y Unicode.

  • Cuando realice comparaciones y operaciones con los meses y días de la semana, utilice las partes numéricas de la fecha en lugar de cadenas de nombres. Las distintas configuraciones de idioma devuelven nombres diferentes para los meses y los días de la semana. Por ejemplo, DATENAME(MONTH,GETDATE()) devuelve May cuando el idioma está establecido en inglés de EE.UU. Mai cuando el idioma es alemán y mai cuando el idioma es francés. En su lugar, utilice una función como DATEPART que utiliza el número del mes en lugar del nombre. Utilice los nombres DATEPART cuando genere conjuntos de resultados que se van a mostrar al usuario ya que, generalmente, los nombres de fecha resultan más significativos que una representación numérica. No codifique, sin embargo, ninguna lógica que dependa de que los nombres mostrados estén en un idioma determinado.

  • Cuando especifique fechas en las comparaciones o como entrada de las instrucciones INSERT o UPDATE, utilice constantes que se interpretan igual en todas las configuraciones de idioma:

    • Las aplicaciones ADO, OLE DB y ODBC deben utilizar la siguiente marca de tiempo, fecha y cláusulas de escape de hora ODBC:

      { ts 'aaaa-mm-dd hh**:mm:ss[.fff] '} como: { ts '1998-09-24 10:02:20' }**

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

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

    • Las aplicaciones que utilizan otras API o desencadenadores, procedimientos almacenados y scripts Transact-SQL deben utilizar las cadenas numéricas sin separar. Por ejemplo, yyyymmdd como en 19980924.

    • Las aplicaciones que usan otras API o scripts, procedimientos almacenados y desencadenadores Transact-SQL deben utilizar la instrucción CONVERT con un parámetro de estilo explícito para todas las conversiones entre los tipos de datos time, date, smalldate, datetime, datetime2 y datetimeoffset y los tipos de datos de cadenas de caracteres. Por ejemplo, la siguiente instrucción se interpreta igual en todas las configuraciones de conexión de formato de fecha o de idioma:

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

      Para obtener más información, vea CAST y CONVERT (Transact-SQL).