使用增量主键sql插入多行

wee*_*ewa 4 sql insert primary-key sql-server-2008

INSERT INTO TABLE1 (COLUMN1, PRIMARY_KEY)
   SELECT 
      COLUMN1,
      (SELECT COALESCE(MAX(PRIMARY_KEY), 0) 
        FROM TABLE1) + 1 
   FROM 
      TABLE2
Run Code Online (Sandbox Code Playgroud)

错误:

违反主键约束.无法在对象中插入重复键.

如何在第一行之后使主键增加?

我希望能够同时向该表添加项目列表,而不是将它们插入RBAR.

谢谢您的帮助

Ric*_*iwi 12

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
Run Code Online (Sandbox Code Playgroud)

仅对于这个语句,ID将是顺序的,例如,如果Max(Primary Key)是99并且它正在插入4个记录,它们将是100,101,102,103.如果同时插入多个进程,则非常容易发生约束违规,但是这并不是说它比你使用的单一记录更糟糕MAX(),这本身就是不安全的.