在没有任何唯一列的循环中插入记录

时间:2012-09-11 06:59:00

标签: sql-server sql-server-2008

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

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函数?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

 select tbl_test.* into tbl_test_loop from tbl_test, ( select 1 as loop union select 2) v

答案 2 :(得分:0)

尝试NTILE,不需要循环:

select NTILE(3) OVER( ORDER BY ( SELECT 1 ) ) x, * 
into tbl_test_loop 
from tbl_test