【问题标题】:Not Storing Decimal Point in SQL Server 2008 R2 Express不在 SQL Server 2008 R2 Express 中存储小数点
【发布时间】:2012-07-18 18:43:23
【问题描述】:

我在英国。我在德国有一台 Windows 2008 服务器,上面安装了 SQL Server 2008 R2 Express。 Windows 的区域设置设置为英国。 SQL Server 语言设置为英语。当我跑步时

sp_helplanguage @@LANGUAGE

显示设置为

us_english

我在数据库中有许多表,其中包含浮点数据类型。当我使用 SSMS 更改浮点值之一时,如果我输入

1234.1234

首先显示为

1234,1234

然后当我单击该行进行保存时,它显示为

12341234

ASP.NET 应用程序通过存储过程提供数据并放入双精度数据 (VB.NET) 中,它会执行一个

String.Format("{0:#0.0000}", dMyDouble)

这呈现为

12341234,0000

不用说,在我的本地服务器(全部基于英国)上,所有数据库输入的数字都会按我的预期显示 (1234.1234),而 .NET 会按照我的预期对它们进行格式化 (1234.1234)。我知道我的欧洲朋友在英国使用与我们不同的符号,但我需要输出英国格式 - 更重要的是数据库中的浮点数!

.NET 格式不正确的事实,我想这纯粹是因为数字没有存储准确性。

我也使用小数列 (18, 4) 进行了一些操作,得到了类似的结果。当我使用点 (.) 键入 1234.1234 时,它会替换为逗号 (,)。当行保存时,它另存为

12341234.0000

【问题讨论】:

    标签: sql-server localization windows-server-2008 sqldatatypes


    【解决方案1】:

    您必须将会话中的LANGUAGE 设置为所需的设置。

    但是,尽管您没有显示任何 C# 代码,但您看到格式问题的事实意味着您在 SQL 命令中将值作为 text 传递。您应该改用@variables。这将具有避免 SQL 注入问题的附带好处。

    【讨论】:

    • 谢谢@Remus。该问题与我通过 SMSS 直接输入有关,因此设置语言不是问题。作为文本传递的值也不是问题。
    猜你喜欢
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多