2012-09-11 46 views
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函數嗎?

+0

在發佈代碼,請選中它並點擊'{}'代碼按鈕。它增加了語法高亮並保留了換行符。 –

+1

爲什麼你想要一個循環?你想達到什麼結果? –

+0

謝謝@Damien_The_Unbeliever – satyajit

回答

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<[email protected]) 
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 @[email protected]+1 
END 
+0

它在3個循環中只插入前2行3次,其餘3行不插入 – satyajit

+0

如果將<>更改爲=,它可以工作......感謝您的回答。 – satyajit

+0

Ooops是的,你是對的我正在使用不存在意味着它應該= – AnandPhadke

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

其插入所有記錄兩次 – satyajit

+0

是不是你想要的? – podiluska

+0

我想要第2行,然後接下來的2行,然後是最後一行..總共3個循環 – satyajit

0

嘗試NTILE,無需循環:

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

:它添加一列。我希望它插入3個交易或批次。您的代碼將所有5行插入一個射擊。 – satyajit

+1

@satyajit - 我認爲我們正在努力理解*在多個批次中實現它的好處是什麼?它沒有任何意義。最後,第二個表中仍然有5行,而表中的行是無序的。 –

相關問題