INSERT INTO TABLE1 (COLUMN1, PRIMARY_KEY)
SELECT
COLUMN1,
(SELECT COALESCE(MAX(PRIMARY_KEY), 0)
FROM TABLE1) + 1
FROM
TABLE2
错误:
主键约束冲突。无法在对象中插入重复的键。
如何使主键在第一行之后递增?
我希望能够同时向此表添加一系列项目,而不是逐个插入它们。
感谢您的帮助。
INSERT INTO TABLE1 (COLUMN1, PRIMARY_KEY)
SELECT
COLUMN1,
(SELECT COALESCE(MAX(PRIMARY_KEY), 0)
FROM TABLE1) + 1
FROM
TABLE2
错误:
主键约束冲突。无法在对象中插入重复的键。
如何使主键在第一行之后递增?
我希望能够同时向此表添加一系列项目,而不是逐个插入它们。
感谢您的帮助。
INSERT INTO TABLE1 (COLUMN1, PRIMARY_KEY)
SELECT COLUMN1,
(SELECT COALESCE(MAX(PRIMARY_KEY),0)
FROM TABLE1) + row_number() over (order by 1/0)
FROM TABLE 2
仅依靠这个语句,ID将是连续的,例如如果Max(Primary Key)
为99并插入4条记录,则它们将是100、101、102、103。如果多个进程同时插入,很容易产生约束违规,但这并不意味着它比使用MAX()
插入单个记录更糟糕,后者本质上是不安全的。DECLARE @CurrentPK INT
SELECT @CurrentPK(MAX(PRIMARY_KEY)
SELECT column1, ROW_NUMBER() OVER (ORDER BY column1) AS 'RowNumber'
INTO #temp
FROM Table2
INSERT INTO TABLE1
(COLUMN1, PRIMARY_KEY)
SELECT COLUMN1,@CurrentPK+RowNumber
FROM #temp
您不必检查最大键并逐个增加1。将其设置为IDENTITY(1,1)NOT NULL
列,服务器会自动处理。然后使用以下代码:
INSERT INTO TABLE1 (COLUMN1)
SELECT COLUMN1
FROM TABLE 2
IDENTITY(1,1)
。是的,您必须更改列设计。"您的方法不被推荐。" - Kaf