自动生成代理项对要插入的许多行显示错误

auto generating surrogates shows an error to many rows to insert

我想通过从一个 table 获取值到另一个来填充我的 table? 我有两个 tables 第一个是 SURROGATE,它有两列 ID , NAME 第二个 Table 命名为 NAMES。所以我只想从 2nd table 中获取名称,并希望填充到 1st table 中。限制是我不想将 ID 列声明为 PK 既不作为标识列。这意味着我必须自己为 ID 列生成 surrogate/sequence。为此,我所做的如下

    declare @cout  int
declare @i  int
set @i=1
set @cout = (select COUNT(abc) from crm.dbo.NAMES)
while(@i<=@cout)
Begin
insert into crm.dbo.SURROGATE(ID,NAME)values
((select coalesce(max(ID), 0)+1 from crm.dbo.SURROGATE),

(select  top (@i) abc from crm.dbo.NAMES  ))
 set @i= @i+1
 end

当我执行此查询时,在第一次迭代中它给出了成功插入到第一个 table 的行,但在第二次迭代中它 returns 前 2 行但我只想要第二个,第二个问题是在第 2 次迭代时 select 插入 2 行时它给许多要插入的行带来错误

在第二次迭代中 @i = 2 因此您有 TOP 2 行要插入。最好使用 ROW_NUMBER 创建一些 id:

DECLARE @max_sur int

SELECT @max_sur = max(ID)
FROM crm.dbo.SURROGATE

INSERT INTO crm.dbo.SURROGATE 
SELECT  COALESCE(@max_sur,0) + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as new_id,
        abc 
FROM crm.dbo.NAMES