违反 PRIMARY KEY 约束 'PK_Address'。等等...我做错了什么?
Violation of PRIMARY KEY constraint 'PK_Address'. etc...what am I doing wrong?
大家晚上好。我是 SQL
的新手,但一直在胡闹。我正在按照我在网上找到的指南在 21 天内学习 SQL
,但我在弄清楚我收到的错误是什么原因时遇到了一些麻烦。
我正在尝试 INSERT
数据到现有的 table。 table 的主键是 AddressID
。我要输入的数据在下面的代码中:
INSERT INTO [dbo].[Address]
(AddressID,Street,City,State,ZipCode)
VALUES
(1,'2400 Broadway','New York','NY',11201),
(2,'320 21st Street','Atlanta','GA',303),
(3,'439 Skyline Blvd','Seattle','WA',98101),
(4,'56 Park Avenue','Dallas','TX',75201);
GO
我不断收到此错误:
Msg 2627, Level 14, State 1, Line 2 Violation of PRIMARY KEY
constraint 'PK_Address'. Cannot insert duplicate key in object
'dbo.Address'. The duplicate key value is (1).
我已经尝试了几乎所有我能想到的方法,但我无法更新我的 table。我在 INSERT INTO
部分下的列名是正确的,我的 VALUES 也是正确的。我确实发现我可以使用单个 INSERT
语句来获取 table 中的数据。最初我使用了 4 个单独的语句。
我做错了什么?
在这种情况下,我认为让数据库通过不指定主键来选择主键是安全的。 table.
中可能已经有数据
INSERT INTO [dbo].[Address]
(Street,City,State,ZipCode)
VALUES
('2400 Broadway','New York','NY',11201),
('320 21st Street','Atlanta','GA',303),
('439 Skyline Blvd','Seattle','WA',98101),
('56 Park Avenue','Dallas','TX',75201);
GO
从错误消息中可以清楚地看出 table 中已经存在 AddressID = 1
,因为您在 AddressID
上有一个 primary key
,您不能插入重复值。
尝试将此查询插入 table
INSERT INTO [dbo].[Address]
(Street,City,State,ZipCode)
SELECT Street,City,State,ZipCode
FROM ( VALUES (1,'2400 Broadway','New York','NY',11201),
(2,'320 21st Street','Atlanta','GA',303),
(3,'439 Skyline Blvd','Seattle','WA',98101),
(4,'56 Park Avenue','Dallas','TX',75201))
v(addressid, street, city, state, zipcode)
WHERE NOT EXISTS (SELECT 1
FROM [dbo].[address] A
WHERE a.addressid = v.addressid)
如果 addressid
列有 identity
属性 则从 insert
列列表和 select
列表中删除 addressid
列。
主键必须是唯一的。如果 AddressID 是您的主键,您的 table 中不能有两行具有相同的 AddressID 编号。主键通常会自动设置,因此您不必自己设置。
将主键视为每行的唯一标识符。重复键错误告诉您地址 table 中已有一行的 AddressID 值为 1。为避免这些错误,您应该将 AddressID 列设置为 IDENTITY,而不必担心设置该值。尝试在不设置 AddressID 的情况下插入记录。像这样:
INSERT INTO [dbo].[Address]
(Street,City,State,ZipCode)
VALUES
('2400 Broadway','New York','NY',11201),
('320 21st Street','Atlanta','GA',303),
('439 Skyline Blvd','Seattle','WA',98101),
('56 Park Avenue','Dallas','TX',75201)
('56 Park Avenue','Dallas','TX',75201);
GO
你做错的是:
- 您的 table
Address
table 中已有 AddressId
(1)。
主键应该是唯一的。不能在 primary key
列中插入重复值。
你大概可以做的是:
update
现有值和 insert
新值。这意味着使用 AddressId
1 更新行并使用新的 AddressIds 插入新行。
您最好让 Sql Server
通过创建“标识列”来决定您的主键值。您可以在创建 table 时创建身份列,如下所示:
CREATE TABLE [dbo].[Address]
(
[AddressId] [int] IDENTITY(1,1) NOT NULL,
[OtherColumns] [int] NULL,
CONSTRAINT [PK_Address] PRIMARY KEY CLUSTERED (AddressId ASC)
)
请注意,如果您使用 Idenity column
创建了 table,则在 insert
操作期间不需要提供任何值,因为 Sql 服务器隐式创建并为您插入该值。
大家晚上好。我是 SQL
的新手,但一直在胡闹。我正在按照我在网上找到的指南在 21 天内学习 SQL
,但我在弄清楚我收到的错误是什么原因时遇到了一些麻烦。
我正在尝试 INSERT
数据到现有的 table。 table 的主键是 AddressID
。我要输入的数据在下面的代码中:
INSERT INTO [dbo].[Address]
(AddressID,Street,City,State,ZipCode)
VALUES
(1,'2400 Broadway','New York','NY',11201),
(2,'320 21st Street','Atlanta','GA',303),
(3,'439 Skyline Blvd','Seattle','WA',98101),
(4,'56 Park Avenue','Dallas','TX',75201);
GO
我不断收到此错误:
Msg 2627, Level 14, State 1, Line 2 Violation of PRIMARY KEY constraint 'PK_Address'. Cannot insert duplicate key in object 'dbo.Address'. The duplicate key value is (1).
我已经尝试了几乎所有我能想到的方法,但我无法更新我的 table。我在 INSERT INTO
部分下的列名是正确的,我的 VALUES 也是正确的。我确实发现我可以使用单个 INSERT
语句来获取 table 中的数据。最初我使用了 4 个单独的语句。
我做错了什么?
在这种情况下,我认为让数据库通过不指定主键来选择主键是安全的。 table.
中可能已经有数据INSERT INTO [dbo].[Address]
(Street,City,State,ZipCode)
VALUES
('2400 Broadway','New York','NY',11201),
('320 21st Street','Atlanta','GA',303),
('439 Skyline Blvd','Seattle','WA',98101),
('56 Park Avenue','Dallas','TX',75201);
GO
从错误消息中可以清楚地看出 table 中已经存在 AddressID = 1
,因为您在 AddressID
上有一个 primary key
,您不能插入重复值。
尝试将此查询插入 table
INSERT INTO [dbo].[Address]
(Street,City,State,ZipCode)
SELECT Street,City,State,ZipCode
FROM ( VALUES (1,'2400 Broadway','New York','NY',11201),
(2,'320 21st Street','Atlanta','GA',303),
(3,'439 Skyline Blvd','Seattle','WA',98101),
(4,'56 Park Avenue','Dallas','TX',75201))
v(addressid, street, city, state, zipcode)
WHERE NOT EXISTS (SELECT 1
FROM [dbo].[address] A
WHERE a.addressid = v.addressid)
如果 addressid
列有 identity
属性 则从 insert
列列表和 select
列表中删除 addressid
列。
主键必须是唯一的。如果 AddressID 是您的主键,您的 table 中不能有两行具有相同的 AddressID 编号。主键通常会自动设置,因此您不必自己设置。
将主键视为每行的唯一标识符。重复键错误告诉您地址 table 中已有一行的 AddressID 值为 1。为避免这些错误,您应该将 AddressID 列设置为 IDENTITY,而不必担心设置该值。尝试在不设置 AddressID 的情况下插入记录。像这样:
INSERT INTO [dbo].[Address]
(Street,City,State,ZipCode)
VALUES
('2400 Broadway','New York','NY',11201),
('320 21st Street','Atlanta','GA',303),
('439 Skyline Blvd','Seattle','WA',98101),
('56 Park Avenue','Dallas','TX',75201)
('56 Park Avenue','Dallas','TX',75201);
GO
你做错的是:
- 您的 table
Address
table 中已有AddressId
(1)。 主键应该是唯一的。不能在primary key
列中插入重复值。
你大概可以做的是:
update
现有值和insert
新值。这意味着使用AddressId
1 更新行并使用新的 AddressIds 插入新行。
您最好让 Sql Server
通过创建“标识列”来决定您的主键值。您可以在创建 table 时创建身份列,如下所示:
CREATE TABLE [dbo].[Address]
(
[AddressId] [int] IDENTITY(1,1) NOT NULL,
[OtherColumns] [int] NULL,
CONSTRAINT [PK_Address] PRIMARY KEY CLUSTERED (AddressId ASC)
)
请注意,如果您使用 Idenity column
创建了 table,则在 insert
操作期间不需要提供任何值,因为 Sql 服务器隐式创建并为您插入该值。