SQL 服务器在转换为 varchar 时更改 float 列中的值

SQL Server changes the value in the float column when converting to varchar

我的 table 中有一列是 float 类型的。 table 是在我将电子表格 (Excel) 数据导入数据库时​​自动生成的。因此,我希望将一列从 float 更改为 varchar,但是当我尝试这样做时,出现错误:

'tblInvoices' table
Unable to create index 'IX_tblInvoices'.
The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.tblInvoices' and the index name 'IX_tblInvoices'.
The duplicate key value is (1.00001e+006). The statement has been terminated.

它是一个唯一的列,并且这样设置(由于某些原因没有设置为主键)。我已经有 运行 个查询来搜索和删除重复字段,但还有 none。我运行的查询如下:

WITH CTE AS
(
   SELECT 
       Invoice,
       RN = ROW_NUMBER()OVER(PARTITION BY Invoice ORDER BY Invoice)
   FROM
       dbo.tblInvoices
)
DELETE FROM CTE 
WHERE RN > 1

所以 Invoice 列中的值是 1000010,当我 运行 下面的查询找到一行时。

SELECT * 
FROM [TradeReceivables_APR_IFRS9].[dbo].[tblInvoices] 
WHERE Invoice = 1.00001e+006

请注意,我搜索的是错误中的值,1.00001e+006,而不是 1000010。

所以我的问题是为什么 DBMS 会这样做?为什么它会这样改变价值?当我删除该列时,它会与另一列一起执行,依此类推(总共约 40 000 行)。如何在不更改数据和出错的情况下将列从 float 更改为 varchar

任何帮助将不胜感激!

该字段似乎是一个整数,因此您可以先将其转换为 BIGINT,然后再转换为 VARCHAR

Declare @Invoice as float = 1.00001e+006
print cast(@Invoice as varchar) -->> Result : 1.00001e+006
print cast(cast(@Invoice as bigint) as varchar) -->> Result : 1000010