我正在创建一个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
消息
答案 0 :(得分:2)
要在SQL脚本中指定数字作为常量,您应该遵循SQL 语法规则,而不是区域设置。语法规定您使用.
作为小数分隔符。至于千分离器,根本不使用它们。
请注意,这严格来说是在脚本中编码您的数据,而不是显示它们。显示是您的区域设置重要的地方,如果它们按顺序排列,您应该相应地格式化输出:十进制分隔符作为逗号,千位分隔符作为句点。
答案 1 :(得分:1)
插入SQL时,逗号用于分隔值。我不知道这是什么类型的字段,但如果它是INT或DECIMAL它将无法工作。
为了让它正常工作,请在它们周围加上引号,如下所示:
insert into @tempTable
values ("somestring", '1,23')
最好的是:
答案 2 :(得分:0)
实际上添加参数为我解决了同样的问题。
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 是十进制。