sql - 插入时 float 更改为科学记数法

标签 sql sql-server t-sql

当我插入数字时,我的 contactid 字段是一个包含 11 或 12 个数字的 float ,该 float 更改为科学记数法,导致重复键错误。如果我只运行 Select 查询,我会得到我期望的结果。但是当我执行插入时,出现以下错误。我已经尝试了几乎所有的强制转换,但最终仍然得到科学记数法?

消息 2627,级别 14,状态 1,第 1 行 违反主键约束“metavalues_primarykey”。无法在对象“dbo.metavalues”中插入重复的键。重复的键值为 (4.56219e+014, 41070, 0)。 该声明已终止。

知道为什么吗?

我知道以这种方式进行数据库设计设置并不是应有的方式,但这是我必须处理的。所以请不要告诉我我需要改变我的设计,因为我不能这样做而不是我的来改变设计。

 contactid       fieldgroup metatableid Subfields parent Metavalue
 456209564532953    1004    41140              0    0   NULL
 456209592021740    1004    41130              0    0   NULL
 456210014777935    1004    41097              0    0   NULL
 456211077079073    1004    41107              0    0   NULL




INSERT INTO contactease.dbo.metavalues
        (contactid,
         fieldgroup,
         metatableid,
         subfield,
         metaflags,
         metavalue)
SELECT DISTINCT m.contactid,
            1004,
            mt.metatableid,
            0,
            0,
            NULL
FROM  interact.dbo..[INT_LST_CUSTOM_ENUM] sic
   INNER JOIN interact.dbo.INT_AUX_LST_CUSTOM c
           ON c.LST_CUSTOM_ENUM_ID = sic.LST_CUSTOM_ENUM_ID
              AND c.DIRECTORY_ID <> -4
   INNER JOIN contactease.dbo.main m
           ON m.custnum1 = c.LISTING_ID
   INNER JOIN contactease.dbo.metatable mt
           ON mt.metaname = sic.LST_CUSTOM_ENUM_NM

最佳答案

Float 是一种近似数字数据类型,这意味着它不会始终显示确切的数字,这是主键列上可能拥有的最差数据类型,如果您主键中有大量数字,您应该使用BIGINT,它是精确数字数据类型
由于 float 不代表确切的值,您可能有两个不同的值,但 float 可能认为它们几乎/近似相同的值,并且您会收到重复的 PRIMARY KEY 约束错误。
我的建议
更改列的数据类型或添加另一列用作主键。
最好使用 INT,如果表中的记录超过 2,147,483,647 条,则可以使用 BIGINT。老实说,如果您接近此 INT 限制,您应该考虑表分区。

关于sql - 插入时 float 更改为科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868785/

相关文章:

c# - PetaPoco 存储过程错误 "Incorrect syntax near the keyword ' FROM'。"}

t-sql - 我可以强制使用 "Group By"的 T-SQL 查询返回没有数据的行吗?

sql - TSQL Trim - 可移植方法

sql-server - 当数据源被锁定时如何部署SQL Reporting 2005?

sql - 将 SQL Server 数据库迁移到 SQL Compact 数据库

SQL Server 索引 - 升序或降序,有什么区别?

sql-server - 通过 Azure 资源管理器从公共(public) blob 将 .bacpac 导入到 SQL Azure

c# - ASP.Net SQL 查询输入控件

php - 转换 mysql_result 困难

mysql - 如何在不重复条件值的情况下优化查询?