0

例如,我有下表,它没有任何标识或唯一列:

create table tbl_test ( first_name nvarchar(255), last_name nvarchar(255),
                        [address] nvarchar(255))  
Insert tbl_test values ('Andrei','Corovei','str Meteor') 
Insert tbl_test values ('Pop','Ionut','str Meteor') 
Insert tbl_test values ('Whitehead','John','str Lunii') 
Insert tbl_test values ('Grisham','Robert','str Corcoduselor') 
Insert tbl_test values ('Eugen','Johnesco','str Prunelor') 

我可以使用以下语法将上表中的行插入到另一个表中:

select * into tbl_test_loop from tbl_test

这将一次性插入所有记录。

我可以在批量计数为 2 的循环中插入上述结果,而不是一次性插入而不创建任何 Identity 或 rownumber 函数吗?

4

3 回答 3

1
Declare @loopcount int
Declare @rcount int
Declare @idn int
Declare @iteration int
Declare @strsql varchar(1000)

select @loopcount=2,@idn=1
select @rcount=count(*) from tbl_test
SET @iteration=(@rcount/@loopcount)+(@rcount%@loopcount)

while(@idn<=@iteration)
BEGIN
SET @strsql='INSERT INTO tbl_test_loop select top '+cast(@loopcount as varchar(2))+' * from tbl_test t where not exists(select * from tbl_test_loop l where l.first_name = t.first_name  and l.last_name = t.last_name  and l.[address] = t.[address])'
exec(@strsql)
select 'inserted '+cast(@loopcount as varchar(2))
SET @idn=@idn+1
END
于 2012-09-11T10:30:08.023 回答
0
 select tbl_test.* into tbl_test_loop from tbl_test, ( select 1 as loop union select 2) v
于 2012-09-11T07:05:58.323 回答
0

试试 NTILE,不需要循环:

select NTILE(3) OVER( ORDER BY ( SELECT 1 ) ) x, * 
into tbl_test_loop 
from tbl_test
于 2012-09-11T10:04:37.187 回答