SQL-需要使用唯一的主键复制行

SQL-需要使用唯一的主键复制行,sql,sql-server,Sql,Sql Server,我需要复制表中的一些行,但主键必须是唯一的。当我尝试这样做时,我得到了“违反主键约束” 本例中的CustomerId是主键。因此FirstName和LastName中的值需要保持不变,但CustomerId需要更改 谢谢 根据您的评论,CustomerId似乎不是身份栏。这使得事情变得更加棘手,因为不清楚主键是如何生成的。对于简单情况,您可以使用以下方法: -- Retrieve maximum value of CustomerId DECLARE @maxid int = 0 SELECT

我需要复制表中的一些行,但主键必须是唯一的。当我尝试这样做时,我得到了“违反主键约束”

本例中的CustomerId是主键。因此FirstName和LastName中的值需要保持不变,但CustomerId需要更改


谢谢

根据您的评论,
CustomerId
似乎不是身份栏。这使得事情变得更加棘手,因为不清楚主键是如何生成的。对于简单情况,您可以使用以下方法:

-- Retrieve maximum value of CustomerId
DECLARE @maxid int = 0
SELECT @maxid = MAX(CustomerId) FROM Company.Customer

-- When inserting data for column CustomerId add maximum id value and row number
-- This should ensure that the key values do not clash
INSERT INTO Company.Customer (CustomerId, FirstName, LastName)
SELECT ROW_NUMBER() OVER (ORDER BY CustomerId ASC) + @maxid, FirstName, LastName 
FROM Company.Customer    
WHERE LastName LIKE '%JONES%';
但是,如果您没有理由不这样做,我建议您使用IDENTITY列—这将使事情更容易处理。

将主键“CustomerId”保留在查询的选择部分之外。。。它应该在插入的行上自动生成

INSERT INTO Customer (FirstName, LastName)
(SELECT FirstName, LastName
FROM Customer
WHERE LastName LIKE '%JONES%')

字段
CustomerId
是标识字段吗?也是MySQL还是SQL Server?主键是唯一的是有充分理由的!!这是SQL Server。在属性中,它表示主键:True,允许空值:False,计算值:False,标识:False,标识种子:0,标识增量:0。它在Microsoft SQL中。当我这样做时,它会说“列名或提供的值的数量与表定义不匹配”。您的表名为
Company.Customer
,是否有列
FirstName
LastName
?我已经更改了标签,但本质上是一样的。在属性中,它表示主键:True,允许空值:False,计算值:False,标识:False,标识种子:0,标识增量:0
INSERT INTO Customer (FirstName, LastName)
(SELECT FirstName, LastName
FROM Customer
WHERE LastName LIKE '%JONES%')