0

たとえば、IDまたは一意の列を持たない次のテーブルがあります。

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

これにより、すべてのレコードが 1 回で挿入されます。

Identity または行番号関数を作成せずに、上記の結果を 1 回ではなく、バッチ カウント 2 のループに挿入できますか?

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

NTILEを試してください。ループは必要ありません。

select NTILE(3) OVER( ORDER BY ( SELECT 1 ) ) x, * 
into tbl_test_loop 
from tbl_test
于 2012-09-11T10:04:37.187 に答える
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 に答える