2

我正在创建一个 ssrs 报告并创建一个 mockdata sql 脚本。
在脚本中,我想插入一个十进制值,如下所示:

declare @tempTable table(
  aString varchar(50),
  aDecimal decimal(5,2)
)

insert into @tempTable
values ("somestring", 1,23)

“someString”后面的值实际上是一个十进制值,用逗号作为小数分隔符。SQL 将其解释为单独的值,因此会引发有关列数的值过多的错误。如何解决这个问题?

更新
澄清:我在“。”的地区。是千位分隔符,',' 是小数分隔符。
把它放在引号之间也不起作用。它给了我Error converting data type varchar to numeric信息

4

3 回答 3

3

要在 SQL 脚本中将数字指定为常量,您应该遵循 SQL语法规则,而不是区域设置。语法规定您使用 a.作为小数分隔符。至于千位分隔符,根本不用。

请注意,这完全是关于在脚本中编码数据,而不是显示它们。显示是您的区域设置确实重要的地方,如果它们按顺序排列,您应该相应地格式化输出:小数分隔符为逗号,千位分隔符为句点。

于 2012-06-18T10:07:09.483 回答
1

插入 SQL 时使用逗号分隔值。我不知道这是什么类型的字段,但如果它是 INT 或 DECIMAL,它将不起作用。

要使其正常工作,请在它们周围加上引号,如下所示:

insert into @tempTable
values ("somestring", '1,23')

最好的办法是:

  1. 如果是小数,请使用 . 作为逗号,然后操作字符串。
  2. 如果是 1000 分隔符,去掉它,显示的时候可以这样做
于 2012-06-18T08:03:36.300 回答
1

实际上添加参数为我解决了同样的问题。

cmd.CommandText = "INSERT dbo.tickets (places,date,client_id,price,trip_id) VALUES (" + PlaceQuontity.Value + ",@date "  + "," + id + "," + "@price" + "," + TripId + ")";

            cmd.Parameters.Add("@date", SqlDbType.Date).Value = TicketDate.Value.Date;
            cmd.Parameters.Add("@price", SqlDbType.Decimal).Value = FinalPrice;

其中 cmd 是我的 sql 命令,而 finalprice 是十进制的。

于 2021-05-05T12:41:03.300 回答