【发布时间】:2019-12-21 19:06:49
【问题描述】:
我的表中有一个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 而不会更改数据并出现错误?
任何帮助将不胜感激!
【问题讨论】:
标签: sql-server ssms sqldatatypes