T-SQL:在使用Table和它的View时禁用默认的FLOAT舍入



大家好!
这里是浮点四舍五入的问题,当我想要插入数据到表使用它的视图。数据需要以varchar的形式存储在Table中。
表:

CREATE TABLE [dbo].[TestTableFloat_E]
(
  [id] [int] IDENTITY(1,1) NOT NULL,
  [FloatField] [varchar](100) NOT NULL
)

视图:

ALTER VIEW [dbo].[TestTableFloat]
AS
SELECT  id
        ,Convert(float, FloatField) as FloatField
FROM dbo.TestTableFloat_E

数据,我从表中选择使用它的视图-必须有float类型(字段FloatField)。我不能插入数据到表中,如果我需要,我需要用它的视图。因此,我不能(这是任务规则)将数据直接插入到Table中,只能使用View。我创建了插入数据的触发器:

CREATE TRIGGER [dbo].[tr_TestTableFloatInsert] 
   ON  [dbo].[TestTableFloat] 
   INSTEAD OF INSERT
AS 
BEGIN
    SET NOCOUNT ON;
insert into TestTableFloat_E (FloatField)
select FloatField
FROM INSERTED

动作:我尝试插入数据到TestTableFloat_E(表)与它的视图(TestTableFloat)的帮助下,上升触发器和插入数据到表。问题:当我插入浮点数,我有四舍五入,我不需要:

insert TestTableFloat (FloatField)
select 123.123456

我有123,123在表TesttableFloat。我需要它不四舍五入,我必须是123.123456会是什么呢?

你可以让它存储更多的数字,但它会切换到科学记数法:

CREATE TRIGGER [dbo].[tr_TestTableFloatInsert] 
   ON  [dbo].[TestTableFloat] 
   INSTEAD OF INSERT
AS 
BEGIN
    SET NOCOUNT ON;
insert into TestTableFloat_E (FloatField)
select CONVERT(varchar(100),FloatField,2)
FROM INSERTED
END

最终将1.231234560000000e+002存储到表中。

From CAST and CONVERT:

当表达式为float或real时,style可以是下表所示的值之一。其他值按0处理。


0(默认)最多6位数字。适当时用科学记数法。


1总是8位数。始终使用科学记数法。

2
总是16位。始终使用科学记数法。


插入通常的警告:期望浮点数和十进制表示总是完全可转换是徒劳的,以及使用不适当的数据类型来存储特定类型的数据


对于这个数据来说,最好的数据类型应该是具有适当规模和精度的decimal,而这两种类型都不是您正在使用的。但你声称这些是"必需的"类型。例如,如果视图使用小数而不是浮点数,则存储的varchar(100)值完全符合预期。

最新更新