开发者社区> 问答> 正文

SQL Server转换为varchar时会更改float列中的值

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

'tblInvoices'表 无法创建索引'IX_tblInvoices'。 CREATE UNIQUE INDEX语句终止,因为找到了对象名称'dbo.tblInvoices'和索引名称'IX_tblInvoices'的重复键。 重复的密钥值为(1.00001e + 006)。该语句已终止。

它是唯一列,并以此方式设置(出于某种原因未设置为主键)。我已经运行查询来搜索和删除重复的字段,但是没有。我运行的查询如下:

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不更改数据和出现错误的情况下将列从更改为?

展开
收起
心有灵_夕 2019-12-22 14:01:28 1013 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载