Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在循环中插入没有任何唯一列的记录_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql server 在循环中插入没有任何唯一列的记录,sql-server,sql-server-2008,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

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

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的循环中插入上述结果,而不是在不创建任何标识或行数函数的情况下一次性插入?

请尝试,不需要循环:

 select tbl_test.* into tbl_test_loop from tbl_test, ( select 1 as loop union select 2) v
select NTILE(3) OVER( ORDER BY ( SELECT 1 ) ) x, * 
into tbl_test_loop 
from tbl_test
Declare@loopcount int
声明@rcount int
声明@idn int
声明@iterationint
声明@strsqlvarchar(1000)
选择@loopcount=2、@idn=1
从tbl\U测试中选择@rcount=count(*)
设置@iteration=(@rcount/@loopcount)+(@rcount%@loopcount)

while(@idnWhen发布代码时,请突出显示它并点击
{}
code按钮。它添加语法高亮显示并保留换行符。为什么要循环?你想得到什么结果?谢谢@Damien\u,不相信的批次“通常”在10000左右。2似乎很低!!没有唯一的键==你如何知道哪些记录已经插入了某种行号??它的ins将所有记录插入两行我想先插入前两行,然后插入下两行,最后一行..总共3个循环:添加一列。我想将其插入3个事务或批处理中。您的代码一次插入全部5行。@satyajit-我想我们很难理解多批处理的好处是什么-它没有有意义。在最后,第二个表中仍然有5行,而表中的行是无序的。它只在3个循环中插入前2行3次。它不插入其余3行。如果您将更改为=,它会起作用。非常感谢您的回答。哦,是的,您是对的,我使用的不存在意味着它应该是=
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