【发布时间】:2018-02-22 15:57:38
【问题描述】:
下面的代码演示了使用标准插入语句将具有精度的十进制值插入到 bigint 列中。 SqlServer 会截断精度但不会抛出错误以通知 DBA。
CREATE TABLE [dbo].[TableX]
(
[ColumnA] [bigint] NULL
);
SET NUMERIC_ROUNDABORT ON;
SET XACT_ABORT ON;
insert into [dbo].[TableX] (ColumnA)
select 999999999.99;
select * from [dbo].[TableX]
-- output ==> 999999999 (precision missing) -- no error thrown?
问题:
我。你能解释为什么精度丢失并且没有抛出错误吗?
二。在这种情况下你能建议一种强制 SQLServer 抛出错误的方法吗?
注意: SQL 批量插入在尝试将小数转换为 bigint 时会引发错误,而精度会丢失,因此我相当肯定必须有一种方法可以按照示例代码使用标准插入语句来实现这一点。
【问题讨论】:
标签: decimal sql-server-2014 precision sql-insert bigint