gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:35:05 25 4
gpt4 key购买 nike

当我将浮点数更改为科学记数法导致重复键错误时,我有一个带有 11 或 12 个数字的浮点数的 contactid 字段。如果我只是运行 Select 查询,我会得到我期望的结果。但是当我进行插入时,出现以下错误。我已经尝试了几乎所有的转换,但仍然以科学记数法结束?
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'metavalues_primarykey'. Cannot insert duplicate key in object 'dbo.metavalues'. The duplicate key value is (4.56219e+014, 41070, 0).
The statement has been terminated.

知道为什么吗?

我知道以这种方式设置 DB 设计不是它应该的方式,但这是我必须使用的方式。所以请不要告诉我我需要改变我的设计,因为我不能这样做不是我的来改变设计。

 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

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com