1

我正在尝试更新大型代码库以正确指定CultureInfo和/或IFormatProvider格式化/解析值时。例如,在解析我从用户那里获得的值时,我CultureInfo.CurrentCulture在调用时传递TryParse,当将浮点数转换为字符串以保持持久性时,我CultureInfo.InvariantCulture在调用时传递ToString

我的问题是:在生成 SQL 查询时,我应该使用不变的文化或 SQL 服务器的文化来格式化数字等吗?也就是说,如果我的电脑设置为 German(德国),这些查询中哪个是对的?

select foo from bar where baz = 123.45

或者

select foo from bar where baz = 123,45

同样,如果我使用 SQLCAST将浮点值转换为字符串,那么 SQL 将使用什么语言环境进行转换?

我确实搜索了 SQL 文档,但到目前为止我找不到任何好的答案。我确实找到了一些有关日期格式的信息(SET DATEFORMAT 等),但仅此而已。

注意:我意识到将输入传递给 SQL 查询的首选方法是通过参数,因此我们假设为了参数,我有充分的理由将它们格式化为查询字符串。此外,处理查询输入只是更广泛问题的一部分。

4

1 回答 1

4

它会抛出一个错误。SQL Server 的语言只影响日期/时间值。

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

我在瑞士,必须处理所有这三个问题......

  • 1.234,56 (德)
  • 1'234,56 (CH)
  • 1,234.56 (EN-GB)
于 2009-04-14T07:01:20.320 回答