¿considera la cultura de SQL Server / locale al convertir los valores a / de las cadenas?

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

  •  09-09-2019
  •  | 
  •  

Pregunta

Estoy intentando actualizar una gran base de código para especificar correctamente el CultureInfo y / o IFormatProvider al formatear / valores de análisis sintáctico. Por ejemplo, al analizar un valor de recibo por parte del usuario, paso CultureInfo.CurrentCulture al llamar TryParse, y al convertir un flotador a una cadena de persistencia, paso CultureInfo.InvariantCulture al llamar ToString.

Mi pregunta es la siguiente: cuando se genera consultas SQL, ¿debería Formato de números y similares, usando la referencia cultural de todos, o la cultura del servidor SQL, o qué? Es decir, si la computadora se establece en alemán (Alemania), ¿cuál de estas consultas es verdad?

select foo from bar where baz = 123.45

o

select foo from bar where baz = 123,45

Del mismo modo, si uso CAST de SQL para convertir un valor de coma flotante a una cadena, lo local es SQL va a utilizar para la conversión?

Lo hice buscar la documentación de SQL, pero hasta ahora no puedo encontrar ningún buenas respuestas. Lo que encontrar algo de información sobre el formato de la fecha (DATEFORMAT SET y similares), pero eso es todo.

Nota: : Soy consciente de que la mejor forma de transmitir entradas a una consulta SQL es a través de parámetros, así que vamos a suponer por mor del argumento de que tengo una buena razón para darles formato en la cadena de consulta. También, entregando entradas de consulta es sólo una parte de la cuestión más amplia.

¿Fue útil?

Solución

Se generará un error. El lenguaje de SQL Server sólo afecta a los valores de fecha / hora.

SET LANGUAGE Deutsch
SELECT 'true' WHERE 1 <> 123,45

--gives
Msg 102, Level 15, State 1, Line 2
Falsche Syntax in der Nähe von ','.
There is far too much ambiguity in number formats

SET LANGUAGE Deutsch
SELECT 'true' WHERE 1 <> 123.45
--gives true

Estoy en Suiza y tener que lidiar con los 3 de estos ...

  • 1.234,56 (DE)
  • 1'234,56 (CH)
  • 1,234.56 (EN-GB)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top