SQL 快速向表中插入100萬條資料

2021-06-07 00:54:27 字數 3753 閱讀 7174

setnocounton;

02use master;

03go

04----判斷資料庫testdb是否存在,即建立資料庫

05if db_id('testdb')isnull

06createdatabasetestdb

07go

08use testdb

09go

10---判斷nums 表是否存在,存在即將其刪除

11if object_id('dbo.nums')isnotnull

12droptabledbo.nums;

13go

14---重新建立表

15createtabledbo.nums(nintnotnullprimarykey);

16declare@maxasint,@rcasint;

17set@max=1000000;

18set@rc=1;

19

20insertintodbo.numsvalues(1);

21while @rc*2<=@max

22begin

23insertintodbo.numsselectn+@rcfromdbo.nums;

24set@rc=@rc*2;

25end

26insertintodbo.nums

27selectn+@rcfromdbo.numswheren+@rc<=@max;

28go

**分析:

set nocount on:這是乙個儲存過程,當 set nocount 為on 時不返回計數(表示受transact-sql 語句影響的行數,即訊息返回:命令已完成)。當set nocount 為off 時返回計數((1 行受影響)(2 行受影響)(4 行受影響)(8 行受影響)(16 行受影響)....等等返回資訊).如果儲存過中包含的一些語句並不返回許多實際的資料,則該設定由於大量減小了網路流量,因些可以顯著提高效能。

set @max=1000000:為定義插入的最大值。這裡我設其為100w。

view source

print?

1insertintodbo.numsvalues(1);

2while @rc*2<=@max

3begin

4insertintodbo.numsselectn+@rcfromdbo.nums;

5set@rc=@rc*2;

6end

7insertintodbo.nums

8selectn+@rcfromdbo.numswheren+@rc<=@max;

9go

以上這段**為核心**:

insert into dbo.nums select n+@rc from dbo.nums:的意思是:在乙個while迴圈中的,每執行一次都會向表dbo.nums 中插入一批資料,這批資料是表dbo.nums 中原有的資料,只是字段 n 的值是在原基礎上增加了2 * @rc(@rc=1,2,3,執行次數) **:

上圖的演算法就是描述這句sql:insert into dbo.nums selectn+@rc from dbo.nums;?而 n+@rc 的值變化為 2的n次方(包括0次方)

當執行完:insert into dbo.nums select n+@rc from dbo.nums; 時發現並沒有100萬條資料,然後 我們補充一句sql語句:

用儲存過程向表中插入100萬條資料

use test drop table if exists t create table t id int not null,name varchar 30 建立儲存過程,輸入記錄數,插入t錶行資料 delimiter create procedure proc1 cnt int begin dec...

批量插入100萬條資料

建立資料庫 create database create database bulktestdb gouse bulktestdb go create table create table bulktesttable id int primary key,username nvarchar 32 p...

sql 語句 迴圈插入100萬條資料到某個表中

use m3 2011 declare i bigint 1 declare j int 1 declare k smallint 1 begin transaction begin try while i 1000000 begin insert into m3 2011 dbo fa clien...