Sql server 在@@rowcount>;时插入数据;0

Sql server 在@@rowcount>;时插入数据;0,sql-server,Sql Server,我需要在不同数据库的同一个表之间插入大量数据。我想使用while,@@rowcount,insert。这仅插入前10行(源表中有数百万行)。有什么想法吗 DECLARE @date datatime SET @date = CURRENT_TIMESTAMP SET @date = @date WHILE @@ROWCOUNT > 0 BEGIN INSERT TOP (10) db2.dbo.tbl2 select * FROM db1.dbo.tbl1 where coldat

我需要在不同数据库的同一个表之间插入大量数据。我想使用
while
@@rowcount
insert
。这仅插入前10行(源表中有数百万行)。有什么想法吗

DECLARE @date datatime 
SET @date = CURRENT_TIMESTAMP

SET @date = @date 
WHILE @@ROWCOUNT > 0
BEGIN
INSERT TOP (10) db2.dbo.tbl2 
select * FROM db1.dbo.tbl1
where coldate < @date
END

(10 row(s) affected)

(0 row(s) affected)
DECLARE@date-datatime
设置@date=当前时间戳
设置@date=@date
而@@ROWCOUNT>0
开始
插入顶部(10)db2.dbo.tbl2
从db1.dbo.tbl1中选择*
其中coldate<@date
结束
(受影响的10排)
(受影响的0行)

您可以尝试将源数据分解为每月批次,如下所示-

DECLARE @date datatime 
SET @date = CURRENT_TIMESTAMP
DECLARE @i int = 0;

WHILE @@ROWCOUNT > 0
BEGIN
SET @date = dateadd(mm, @i, @date)

INSERT INTO db2.dbo.tbl2 
select * FROM db1.dbo.tbl1
where month(coldate) = month(@date)
and year(coldate) = year(@date)

SET @i = @i + 1
END

您总是可以尝试将源数据分解为每月一次的批,如下所示-

DECLARE @date datatime 
SET @date = CURRENT_TIMESTAMP
DECLARE @i int = 0;

WHILE @@ROWCOUNT > 0
BEGIN
SET @date = dateadd(mm, @i, @date)

INSERT INTO db2.dbo.tbl2 
select * FROM db1.dbo.tbl1
where month(coldate) = month(@date)
and year(coldate) = year(@date)

SET @i = @i + 1
END


若表中有任何标识列,那个么可以一次添加100万批次的条件。否则,您可以创建100万个批次,从第二个db表的where子句中选择TOP 100万从第一个db表插入到第二个db表。

如果表中有任何标识列,则可以一次添加100万个批次的条件。否则,您可以创建100万个批次,选择要插入的前100万个,从第一个db的表插入到第二个db的表,并使用“不在”在第二个db表的where子句中。

这是完整的代码吗?最简单的方法可能是@SeanLange,我认为这是将RowCount设为1以进入第一个循环place@Ghost-但是
SET@date=CURRENT\u TIMESTAMP
会这样做。@MartinSmith True,但是他们的代码样本显然是不完整和不准确的。所以他们可能在这两者之间做了一些事情,可能会导致行数为0。这是完整的代码吗?最简单的方法可能是@SeanLange,我认为这是将行数设为1,以便首先进入循环place@Ghost-但是
SET@date=CURRENT\u TIMESTAMP
会这样做。@MartinSmith True,但是他们的代码样本显然是不完整和不准确的。所以他们可能在这两者之间做了一些事情,可能导致行数为0。是的,我想插入所有数据,'10'只是一个例子,一次插入多少行loop@LilyXO是的,但是您需要额外的
,其中
-条件来验证这些行在tbl2中不存在,在我看来,你试图在每次迭代中插入相同的前10行…datetime列有超过2年的数据(具有不同的日期戳)。为什么你要尝试以10个为一批插入数据,而不是一次插入所有数据?@iliketocode当服务器内存不足时,我不得不这样做。是的,我想插入所有数据,“10”只是一个例子,一次插入多少行loop@LilyXO是的,但是您需要额外的
,其中
-条件来验证这些行在tbl2中不存在,在我看来,您试图在每次迭代中插入相同的前10行…datetime列有超过2年的数据(使用不同的日期戳)为什么要尝试以10个为一批插入数据,而不是一次插入所有数据?@iliketocode我不得不这样做,因为有太多的数据会导致服务器内存不足。