插入带逗号的十进制被解释为两个值



我正在创建一个ssrs报告并创建一个模拟数据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的信息

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

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

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

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

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

最好的做法是:

  1. 如果是小数,请使用 . 作为逗号,然后操作字符串。
  2. 如果是 1000 个分隔符,请将其删除,您可以在显示它时执行此操作

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

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代码,最终价格是十进制的。

相关内容

最新更新