【问题标题】:Save decimal values in SQL Server Management Studio在 SQL Server Management Studio 中保存十进制值
【发布时间】:2015-01-27 19:51:35
【问题描述】:

我希望在 SQL Server Management Studio 中保存十进制值。

它们只是作为整数值四舍五入到最接近的值。

这是怎么做到的?如果需要更多信息,我可以得到它。

////////// 列

ProductCode int Unchecked
ProductName text    Unchecked
SupplierCode    nvarchar(50)    Unchecked
Cost    decimal(5, 2)   Unchecked
Quantity    int Unchecked
RetailPrice decimal(5, 2)   Unchecked

/////////表格输出

ProductCode ProductName SupplierCode    Cost    RetailPrice Quantity
1              Milk       SW11           0         1          12

这是将其添加到数据库的 SQL 代码:

SqlCommand addProduct = new SqlCommand("INSERT INTO dbo.NCAProduct  VALUES(" + txtProductCode.Text + ", '" + txtProductName.Text + "', '" + txtSupplierCode.Text + "', " + txtCost.Text + ", " + txtRetail.Text + ", " + txtQuantity.Text + ");", sqlConnect);

【问题讨论】:

  • 请编辑您的问题并显示用于插入数据和检索数据的语句。
  • 你能给我一个你写的实际 SQL 的例子吗?如果将值存储为小数(无论是在变量中还是在表中),默认行为是将该值作为小数返回。除非您在检索数据时显式地强制转换它,或者在不知情的情况下将其放入整数列中。
  • 如果Cost 的类型为decimal(5,2),则执行简单的select 将显示两位小数。如果它没有显示它们,那是因为查询或之后发生的任何事情都会截断值。
  • 我已经编辑了包括 SQL 代码在内的问题,以将值添加到数据库中。

标签: sql sql-server decimal ssms


【解决方案1】:

这里有几个问题:

  1. 如果 50 个字符对于名称来说太少,您需要将 [ProductName] 字段的数据类型更改为 VARCHAR(50) 或其他数字。但是text 数据类型在 SQL Server 2005 发布时已被弃用,即使您仍在使用 SQL Server 2000,我也非常怀疑产品名称需要超过 8000 个字符;-)。 TEXT 的替换是 VARCHAR(MAX),用于实际需要超过 8000 个字符的情况。

  2. 您需要参数化查询,因为在当前表单中,您的代码容易受到 SQL 注入的影响。

  3. 不能在 SQL Server Management Studio (SSMS) 中保存小数。您可以保存查询,也可以保存结果,但 SSMS 是一个 IDE。您的意思可能是您无法使用 .NET 将十进制值保存到 SQL Server。

  4. 虽然 INSERT 语句不需要,但指定列列表始终是一个好主意,因为列的顺序可能不是您所期望的,如果您添加列,则此 INSERT 将失败。含义,而不是:

    INSERT INTO dbo.NCAProduct VALUES(...);
    

    做:

    INSERT INTO dbo.NCAProduct
                  (ProductCode, ProductName, SupplierCode, Cost, RetailPrice, Quantity)
    VALUES(...);
    

    如果没有看到您尝试插入的值(这将有助于缩小问题范围),我会说这是问题的最可能原因,假设您的初始“/// Columns”中的列顺序" list 是实际的顺序。如果您查看字段的插入顺序,txtRetail.TexttxtQuantity.Text 会切换,因为表格似乎有 Quantity,然后是 RetailPrice。在 INSERT 中指定字段列表可以消除此问题,即使这不是这里的实际问题。

如果#4 不是问题,那么您需要调试并逐步查看txtRetail.TexttxtQuantity.Text 的值,因为它们在连接到SqlCommand 时存在。

【讨论】:

  • 谢谢,我现在已经开始工作了。我将如何向同一个数据库添加 BestBefore 日期?
猜你喜欢
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2010-10-23
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 2012-05-27
相关资源
最近更新 更多