【问题标题】:Getting error when adding primary key to existing table Sql server将主键添加到现有表 Sql 服务器时出现错误
【发布时间】:2018-06-21 10:34:32
【问题描述】:

我有一个表:带有列的 Sales_Table:

ProductKey Int not null,
UnitPrice decimal 18,2,
SalesAmount decimal 18,2

我正在尝试使用 alter table 向 ProductKey 列添加主键

ALTER TABLE SALES_TABLE
ADD PRIMARY KEY (ProductKey)

运行代码后出现以下错误:

消息 1505,级别 16,状态 1,第 9 行 CREATE UNIQUE INDEX 语句 由于为对象名称找到重复键而终止 “dbo.Sales_Table”和索引名称“PK__Sales_Ta__A15E99B36F3FE24F”。 重复键值为 (604)。

我可以做些什么来克服这个问题?提前致谢。

【问题讨论】:

  • 主键必须是唯一的,但 SQL Server 会通知您,您的表中有不止一行的 ProductKey 值为 604,因此它无法创建主键。
  • 我大胆猜测,如果你有 1 个重复的密钥,你可能有很多;所以你可能需要看得更远,而不仅仅是ProductKey604
  • 运行 SELECT ProductKey, Count(*) FROM Sales_Table GROUP BY ProductKey HAVING COUNT(*) > 1 将为您提供所有具有重复的 ProductKey 的列表
  • 谢谢,我认为是 ProductKey 中的重复项导致了错误。感谢您的帮助!

标签: sql-server sql-server-2014


【解决方案1】:

试试这个

IF NOT EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Product')
BEGIN
CREATE TABLE [dbo].[Product](
    [ProductKey] [int] NOT NULL,
    [UnitPrice] [decimal](18, 2) NULL,
    [SalesAmount] [decimal](18, 2) NULL,
) ON [PRIMARY]
END

IF NOT EXISTS(SELECT 1 FROM sys.indexes WHERE name='Pk_Product')
BEGIN
ALTER TABLE [dbo].[Product] ADD  CONSTRAINT [Pk_Product] PRIMARY KEY CLUSTERED 
(
    [ProductKey] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
END

【讨论】:

  • 谢谢,这很有帮助,将来会使用它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-11
  • 1970-01-01
相关资源
最近更新 更多