如何往表里插入100W的数据,且不能重复

时间:2020-11-25 23:27:51
 本人想测试数据库性能 但是表里没数据 手动插入100万点累死,如何用while寻混加 rand插入100W的数据,还有哪位大牛帮解释下 下面这条语句如何用 ,把注视也加上谢谢我需要 明白是怎么回事

rand(abs(convert(int,checksum(newid()))))*10000

11 个解决方案

#1




create table #testTB
(
testid nvarchar(20)
)
declare @num int
set @num =1
while(1=1)
begin
insert into #testTB(testid) values( rand(abs(convert(int,checksum(newid())))))
set @num=@num+1
if(@num > 1000000)
return;
end

#2


如何生成字符串呢

#3


drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 

 
    insert into #testTB(testid) values(CAST( @myid as nvarchar(50)))
    go 100 
 select * from #testTB
 



testid
--------------------------------------------------
93F731C3-46CA-4D12-89CF-27154550BB73
D6FBAEA3-DABB-453E-BC2D-32C3A70C23F3
651A345B-77B1-4073-ABFB-E112005685E4
54D412DC-3F1D-4284-8D2F-61ABFA6D78F4
EE8EB30A-71C3-496F-9C22-91B0A8051315
46911489-BCFC-4B04-8CCE-BD2C4280B9ED
B303D2AF-F1D7-4030-B9E1-0AAB28D7A8AC
6071D940-42E5-40F5-B654-05F0526D2125
55ED3B8A-91E3-4DA2-90C4-2D91EE02066E
9BD2B185-B096-4A85-B42B-99DE7631FDDF
7B76EF20-74DC-4523-A3FF-985508DEC68C
D73CA66E-6FF6-44B4-B2F8-F96C12B7BD0B
A8CAE245-C08F-4EF3-9706-164324F11124
FB63C2C1-52CB-471A-A000-F888CCD98C4F
347A6E45-8AEF-4DA0-B03D-7A304D9717FF
FD7662D9-456B-47AE-AE2B-6846143549F8
1F09C1F0-DD5D-4D77-A243-6D6708E231D9
AAEF3140-4C90-4D5C-8BFF-357DD033D6A3
B456A61A-ACD0-448D-A2FA-4E7CE29881DE
2878E4C2-EEEB-4CC2-8803-D349ACBBA140
F4A84C13-7254-428E-A40E-A66081A7FA51
974C9105-2113-400A-8DAF-ED2337E63A38
A3BF6C66-159B-4B94-8215-29CB261CC66C
2F057C2F-368D-4E13-9D2A-E72383542023
8D2B7DD4-1792-42EE-8679-5011D4E2D10E
BD184120-FA6B-4783-8A01-07DB77F2595A
7DA9917F-265C-4665-8B12-3845CD9DA5D0
B24F2A0F-B8C2-46C4-84D9-C9E78554B4E5
13E60A75-B3DD-48D9-AE5D-77828AEDBCF1
09B5B9B9-6414-43FF-A3B8-00F5DC791B07
A3698926-6A31-43C2-9FF9-13A6B06E477A
39B671BA-9ECF-4C6F-A244-C5C6498BEFB3
3249F2F0-D345-4520-B51A-10E1869339A3
BA9518DF-4719-471B-ABE1-691F8A8DD544
50E85266-7452-4B28-A7B3-E9C7A4A4C711
B42CD27A-F09D-40C5-9D9E-73B9F3EBC463
AB935884-FD25-44C8-B5AD-C3E73F50FD56
231D4703-BAB3-4D08-8C0A-93933125857C
19746AFF-2B44-46C9-9477-F9F6D1828734
E3B8CA8A-3719-4079-AA96-0C68F934C5A5
37F21998-1202-41EB-AED8-941C44F4036F
E306FE13-1A34-46F7-BB18-9C85657D671C
1B2CD51D-91C9-4A53-829D-263EDF1D73EB
F52B2452-D667-4C3B-913D-9BEC90E04B34
9911130C-4351-4FB1-BB83-62AA112C70D8
F231475E-2E22-474E-834F-42556C647FD7
97F778E0-0EDF-4F29-AEA8-91F1E7DE93BC
3D1CF451-D7DE-4AAB-85A8-CC82F664B80D
62197C71-0CB9-4414-9026-C9702BF67DF5
BF24E8DF-58A0-4B8D-9675-91219F8EBFE0
EE466428-678D-4419-8E6A-804AE9C36920
AAD03C61-E986-4F66-ABAC-520E0B32894C
D8E378F9-22B5-485B-B7C6-80B12A081649
5A974DD9-CC83-42C0-8492-C19007A94C3A
6B9BBD52-53F9-4E12-9324-4D190905083D
02B6687E-A7E0-43E7-B69D-DCEC4ECDE1C0
4008F7C5-2ABC-4FF6-8427-4D9F0BA13BA8
46A828BF-B780-411A-9D80-32E1B5C08E90
F55A0302-9A44-4B8D-9EA5-2BB66AC3C601
583D17E3-9853-412B-833C-048E58D0FEBA
98F702F2-E7CB-4FA8-94B2-6678F0C90482
A6991799-ADF7-4546-ADF0-9F5BC82EBE1A
5918E7CE-A208-4DDC-9B4E-D009133CB482
4CCBA0C3-5B9B-486E-98E4-1C037E74A54A
A438940F-F2AE-4858-987A-BD12D8EEFA72
13B6D58B-14A7-48A5-BC30-D0AB938906EB
F779766E-0C77-4A80-AD6A-BA66113D7723
42F78184-3BA6-411A-A625-A84014A76B75
FD117E57-891A-468B-9799-ACE0AEAB9FEF
F9B36520-B95F-40AA-A462-511D4A136C26
4A62F32D-5CFA-44C1-BD72-B1174B61C7E5
293B33DC-5582-45F7-840D-E09205D11F78
43936AD1-0361-43DD-A285-83E7F493D800
11414B05-31C9-4717-BDEB-7D5403D0A118
C07A002F-26D9-4B5D-9664-982BDBD94C62
9A7917D1-AB58-46CD-8DAA-5A3EBBFEC57E
745C886E-E089-45E6-A3DB-C4D7A40C5412
13511911-2007-446A-8BBC-208557E7EAF9
AEFDD3ED-C05E-443E-BAA0-2154E585A2DF
B74C9EAB-510E-4A71-8982-025AB4B8A305
C6DC1A49-BEA2-48C9-AE9E-40837D50F28B
C17D3271-61C5-4F3D-9A67-02B61A632A20
CB6E35F6-A780-41AF-BAF4-850F57247120
F40DB9FB-EC53-4ED0-AAA4-EF7108A5630E
BCF5EA53-6797-434F-9F9F-965338A2098A
65A84D6A-895F-4323-A6D3-3A225B62761E
CA06C3A1-E6C0-46B5-BB2F-403F95912383
9867EC48-7700-43F2-8CB7-79E4BB50B584
FF1F9C6B-27B0-40C6-BE87-80A60F9D949E
BCAE848F-6A01-4522-9380-D637C581B9A4
3D086DC1-B019-4BE2-AA5F-70A02DD013E8
9744C1F9-0132-441F-BC71-4DFD6A99834E
C4EFD5B9-6161-4F77-8E78-258487FF8FE1
8564AAE0-F632-457D-8BCD-CA0E96A6696D
45A24ED3-7BA0-4E40-8987-FE0BF424CD9B
3C46E7D8-FF58-43EA-B5F2-8BB2C86FD8CB
819752E8-C5A1-4892-9846-27AC68C3A5E8
E2A73410-5E85-4DC7-B351-AD23F3F98412
C21D5BAC-FE06-42E9-B9E6-043C9C9569B0
BE9408DC-8F7F-4D39-BAE0-85515ED15F69

(100 行受影响)

#4


拼截字符串,
insert into 表名
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
...
...
...
select 字段1,字段2,字段3.。。。。。。
最后1条要把union去掉呢。
不然会有问题的。

用1条sql语句就可以搞定了。

#5


引用 3 楼 szstephenzhou 的回复:
SQL code

drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 

 
    insert into #testTB(testid) values(CAST( @myid……

这个好!

#6


drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 
    insert into #testTB(testid) values(CAST( @myid as nvarchar(50)))
    go 100 
 select * from #testTB

就是这个!

#7



use  test
go
if object_id('myTable') Is not null Drop table myTable
go
Create table myTable(data  nvarchar(50))
go

declare @maxID int
set @maxID =1000000;

;with
L0 as (select 1 as ID union all select 1),
L1 as (select a.ID from L0 as a , L0 as b),
L2 as (select a.ID from L1 as a , L1 as b),
L3 as (select a.ID from L2 as a , L2 as b),
L4 as (select a.ID from L3 as a , L3 as b),
L5 as (select a.ID from L4 as a , L4 as b),
SeqNo as (select row_number()over(order by ID) as ID from L5)

Insert into myTable(data)
select rand(abs(convert(int,checksum(newid()))))*10000 from SeqNo where ID<=@maxID

go


生成100W条数据使用不到4秒,环境是Win7 + SQL Server 2012

#8


非CTE方法,直接Insert方法:


if object_id('myTable') is not null
drop table myTable

create table myTable(data nvarchar(50))
go
Set nocount on

declare @maxID int,@r int
select @maxID =1000000,@r =1

insert into myTable(Data) values(rand(abs(convert(int,checksum(newid()))))*10000)

while @r*2<=@maxID 
begin
insert into myTable(Data) select rand(abs(convert(int,checksum(newid()))))*10000 from myTable

set @r=@r*2
end

if Exists(Select 1 From myTable Having count(1)<@MaxID)
insert into myTable(Data) 
select top(@MaxID-@r) rand(abs(convert(int,checksum(newid()))))*10000 from myTable

go

#9


该回复于2012-03-05 11:08:10被版主删除

#10


 
  不知道你要测试的数据是什么?

  一个简单的办法是:
   

1.
CREATE TABLE [test](
[id] [int] IDENTITY(1,1) NOT NULL,
[txt] [nchar](10) NULL
) ON [PRIMARY]

2.
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')

3.
INSERT INTO test(txt) 
SELECT txt
FROM test AS test_1




把第3步重复运行直到达到你的要求。

#11


引用 3 楼 szstephenzhou 的回复:
SQL code

drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 

 
    insert into #testTB(testid) values(CAST( @myid……


就这个

#1




create table #testTB
(
testid nvarchar(20)
)
declare @num int
set @num =1
while(1=1)
begin
insert into #testTB(testid) values( rand(abs(convert(int,checksum(newid())))))
set @num=@num+1
if(@num > 1000000)
return;
end

#2


如何生成字符串呢

#3


drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 

 
    insert into #testTB(testid) values(CAST( @myid as nvarchar(50)))
    go 100 
 select * from #testTB
 



testid
--------------------------------------------------
93F731C3-46CA-4D12-89CF-27154550BB73
D6FBAEA3-DABB-453E-BC2D-32C3A70C23F3
651A345B-77B1-4073-ABFB-E112005685E4
54D412DC-3F1D-4284-8D2F-61ABFA6D78F4
EE8EB30A-71C3-496F-9C22-91B0A8051315
46911489-BCFC-4B04-8CCE-BD2C4280B9ED
B303D2AF-F1D7-4030-B9E1-0AAB28D7A8AC
6071D940-42E5-40F5-B654-05F0526D2125
55ED3B8A-91E3-4DA2-90C4-2D91EE02066E
9BD2B185-B096-4A85-B42B-99DE7631FDDF
7B76EF20-74DC-4523-A3FF-985508DEC68C
D73CA66E-6FF6-44B4-B2F8-F96C12B7BD0B
A8CAE245-C08F-4EF3-9706-164324F11124
FB63C2C1-52CB-471A-A000-F888CCD98C4F
347A6E45-8AEF-4DA0-B03D-7A304D9717FF
FD7662D9-456B-47AE-AE2B-6846143549F8
1F09C1F0-DD5D-4D77-A243-6D6708E231D9
AAEF3140-4C90-4D5C-8BFF-357DD033D6A3
B456A61A-ACD0-448D-A2FA-4E7CE29881DE
2878E4C2-EEEB-4CC2-8803-D349ACBBA140
F4A84C13-7254-428E-A40E-A66081A7FA51
974C9105-2113-400A-8DAF-ED2337E63A38
A3BF6C66-159B-4B94-8215-29CB261CC66C
2F057C2F-368D-4E13-9D2A-E72383542023
8D2B7DD4-1792-42EE-8679-5011D4E2D10E
BD184120-FA6B-4783-8A01-07DB77F2595A
7DA9917F-265C-4665-8B12-3845CD9DA5D0
B24F2A0F-B8C2-46C4-84D9-C9E78554B4E5
13E60A75-B3DD-48D9-AE5D-77828AEDBCF1
09B5B9B9-6414-43FF-A3B8-00F5DC791B07
A3698926-6A31-43C2-9FF9-13A6B06E477A
39B671BA-9ECF-4C6F-A244-C5C6498BEFB3
3249F2F0-D345-4520-B51A-10E1869339A3
BA9518DF-4719-471B-ABE1-691F8A8DD544
50E85266-7452-4B28-A7B3-E9C7A4A4C711
B42CD27A-F09D-40C5-9D9E-73B9F3EBC463
AB935884-FD25-44C8-B5AD-C3E73F50FD56
231D4703-BAB3-4D08-8C0A-93933125857C
19746AFF-2B44-46C9-9477-F9F6D1828734
E3B8CA8A-3719-4079-AA96-0C68F934C5A5
37F21998-1202-41EB-AED8-941C44F4036F
E306FE13-1A34-46F7-BB18-9C85657D671C
1B2CD51D-91C9-4A53-829D-263EDF1D73EB
F52B2452-D667-4C3B-913D-9BEC90E04B34
9911130C-4351-4FB1-BB83-62AA112C70D8
F231475E-2E22-474E-834F-42556C647FD7
97F778E0-0EDF-4F29-AEA8-91F1E7DE93BC
3D1CF451-D7DE-4AAB-85A8-CC82F664B80D
62197C71-0CB9-4414-9026-C9702BF67DF5
BF24E8DF-58A0-4B8D-9675-91219F8EBFE0
EE466428-678D-4419-8E6A-804AE9C36920
AAD03C61-E986-4F66-ABAC-520E0B32894C
D8E378F9-22B5-485B-B7C6-80B12A081649
5A974DD9-CC83-42C0-8492-C19007A94C3A
6B9BBD52-53F9-4E12-9324-4D190905083D
02B6687E-A7E0-43E7-B69D-DCEC4ECDE1C0
4008F7C5-2ABC-4FF6-8427-4D9F0BA13BA8
46A828BF-B780-411A-9D80-32E1B5C08E90
F55A0302-9A44-4B8D-9EA5-2BB66AC3C601
583D17E3-9853-412B-833C-048E58D0FEBA
98F702F2-E7CB-4FA8-94B2-6678F0C90482
A6991799-ADF7-4546-ADF0-9F5BC82EBE1A
5918E7CE-A208-4DDC-9B4E-D009133CB482
4CCBA0C3-5B9B-486E-98E4-1C037E74A54A
A438940F-F2AE-4858-987A-BD12D8EEFA72
13B6D58B-14A7-48A5-BC30-D0AB938906EB
F779766E-0C77-4A80-AD6A-BA66113D7723
42F78184-3BA6-411A-A625-A84014A76B75
FD117E57-891A-468B-9799-ACE0AEAB9FEF
F9B36520-B95F-40AA-A462-511D4A136C26
4A62F32D-5CFA-44C1-BD72-B1174B61C7E5
293B33DC-5582-45F7-840D-E09205D11F78
43936AD1-0361-43DD-A285-83E7F493D800
11414B05-31C9-4717-BDEB-7D5403D0A118
C07A002F-26D9-4B5D-9664-982BDBD94C62
9A7917D1-AB58-46CD-8DAA-5A3EBBFEC57E
745C886E-E089-45E6-A3DB-C4D7A40C5412
13511911-2007-446A-8BBC-208557E7EAF9
AEFDD3ED-C05E-443E-BAA0-2154E585A2DF
B74C9EAB-510E-4A71-8982-025AB4B8A305
C6DC1A49-BEA2-48C9-AE9E-40837D50F28B
C17D3271-61C5-4F3D-9A67-02B61A632A20
CB6E35F6-A780-41AF-BAF4-850F57247120
F40DB9FB-EC53-4ED0-AAA4-EF7108A5630E
BCF5EA53-6797-434F-9F9F-965338A2098A
65A84D6A-895F-4323-A6D3-3A225B62761E
CA06C3A1-E6C0-46B5-BB2F-403F95912383
9867EC48-7700-43F2-8CB7-79E4BB50B584
FF1F9C6B-27B0-40C6-BE87-80A60F9D949E
BCAE848F-6A01-4522-9380-D637C581B9A4
3D086DC1-B019-4BE2-AA5F-70A02DD013E8
9744C1F9-0132-441F-BC71-4DFD6A99834E
C4EFD5B9-6161-4F77-8E78-258487FF8FE1
8564AAE0-F632-457D-8BCD-CA0E96A6696D
45A24ED3-7BA0-4E40-8987-FE0BF424CD9B
3C46E7D8-FF58-43EA-B5F2-8BB2C86FD8CB
819752E8-C5A1-4892-9846-27AC68C3A5E8
E2A73410-5E85-4DC7-B351-AD23F3F98412
C21D5BAC-FE06-42E9-B9E6-043C9C9569B0
BE9408DC-8F7F-4D39-BAE0-85515ED15F69

(100 行受影响)

#4


拼截字符串,
insert into 表名
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
select 字段1,字段2,字段3.。。。。。。union
...
...
...
select 字段1,字段2,字段3.。。。。。。
最后1条要把union去掉呢。
不然会有问题的。

用1条sql语句就可以搞定了。

#5


引用 3 楼 szstephenzhou 的回复:
SQL code

drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 

 
    insert into #testTB(testid) values(CAST( @myid……

这个好!

#6


drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 
    insert into #testTB(testid) values(CAST( @myid as nvarchar(50)))
    go 100 
 select * from #testTB

就是这个!

#7



use  test
go
if object_id('myTable') Is not null Drop table myTable
go
Create table myTable(data  nvarchar(50))
go

declare @maxID int
set @maxID =1000000;

;with
L0 as (select 1 as ID union all select 1),
L1 as (select a.ID from L0 as a , L0 as b),
L2 as (select a.ID from L1 as a , L1 as b),
L3 as (select a.ID from L2 as a , L2 as b),
L4 as (select a.ID from L3 as a , L3 as b),
L5 as (select a.ID from L4 as a , L4 as b),
SeqNo as (select row_number()over(order by ID) as ID from L5)

Insert into myTable(data)
select rand(abs(convert(int,checksum(newid()))))*10000 from SeqNo where ID<=@maxID

go


生成100W条数据使用不到4秒,环境是Win7 + SQL Server 2012

#8


非CTE方法,直接Insert方法:


if object_id('myTable') is not null
drop table myTable

create table myTable(data nvarchar(50))
go
Set nocount on

declare @maxID int,@r int
select @maxID =1000000,@r =1

insert into myTable(Data) values(rand(abs(convert(int,checksum(newid()))))*10000)

while @r*2<=@maxID 
begin
insert into myTable(Data) select rand(abs(convert(int,checksum(newid()))))*10000 from myTable

set @r=@r*2
end

if Exists(Select 1 From myTable Having count(1)<@MaxID)
insert into myTable(Data) 
select top(@MaxID-@r) rand(abs(convert(int,checksum(newid()))))*10000 from myTable

go

#9


该回复于2012-03-05 11:08:10被版主删除

#10


 
  不知道你要测试的数据是什么?

  一个简单的办法是:
   

1.
CREATE TABLE [test](
[id] [int] IDENTITY(1,1) NOT NULL,
[txt] [nchar](10) NULL
) ON [PRIMARY]

2.
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')
INSERT INTO [test] ([txt]) VALUES ('abcde12345')

3.
INSERT INTO test(txt) 
SELECT txt
FROM test AS test_1




把第3步重复运行直到达到你的要求。

#11


引用 3 楼 szstephenzhou 的回复:
SQL code

drop table #testTB
create table #testTB
(
    testid nvarchar(50)
)
go
 DECLARE @myid uniqueidentifier 
SET @myid = NEWID() 

 
    insert into #testTB(testid) values(CAST( @myid……


就这个