我有下表,例如没有任何标识或唯一列:
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函数?
答案 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