自动生成代理项对要插入的许多行显示错误
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
我想通过从一个 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