当前位置: 代码迷 >> Sql Server >> SQL,插入数据。该怎么解决
  详细解决方案

SQL,插入数据。该怎么解决

热度:69   发布时间:2016-04-27 13:07:04.0
SQL,插入数据。
SQL code
create table #b ( n int not null primary key) --建表,加主键 declare @max as int, @rc as int --声明两个表量 set @max=100000 --赋值 set @rc=1 --赋值 insert into #b values(1) --插入一个值到表 while @rc<[email protected] --循环 begin --开始 insert into #b select @rc+n from #b --插入数据 set @[email protected]*2 --赋值 end --结束 go 


问下,SET @[email protected]*2 这里是何用意,

insert into #b select @rc+n from #b --插入数据

[email protected]+N 加的N,N的值是起初的1,还是后续累加出来的N列的值

(1 行受影响)
(1 行受影响)
(2 行受影响)
(4 行受影响)
(8 行受影响)
(16 行受影响)
(32 行受影响)
(64 行受影响)
(128 行受影响)
(256 行受影响)
(512 行受影响)
(1024 行受影响)
(2048 行受影响)
(4096 行受影响)
(8192 行受影响)
(16384 行受影响)
(32768 行受影响)
(65536 行受影响)

尼玛,为啥是这么显示。不一行行的受影响。
翻倍了,

上面约束的是小于100000
结果:超出了100000



这是最后的结果,太长了,只复制最后一段数据。

131060
131061
131062
131063
131064
131065
131066
131067
131068
131069
131070
131071
131072

(131072 行受影响)

------解决方案--------------------
探讨

引用:
SQL code

create table #b ( n int not null primary key) --建表,加主键
declare @max as int, @rc as int --声明两个表量
set @max=100000 --赋值
set @rc=1 --赋值
insert into #b values(1) --插入一个值到表
whi……

------解决方案--------------------
insert into #b select @rc+n from #b 

你把已插入表里的所有记录,[email protected],结果肯定是翻倍的

你需要说明这段代码的用途,才知道怎么改
------解决方案--------------------
上面整个语句的作用是生成整数序列,而且是成2的n次方的比例增长序列
SET @[email protected]*2 用意是计算出下轮增长的差值,这也是成倍增长的原因
举个例子说
初始值赋值n=1
@RC = 1
要插入的下一个序列2比n大1,[email protected]
[email protected] = @RC * 2 = 2

第二次进循环,表中有值1,2,要插入的值为3,4 [email protected] = 2 ,[email protected] = @RC * 2 = 4
第三次进循环,表中有值1,2,3,4,要插入的值5,6,7,8 [email protected]= 4,[email protected] = @RC * 2 = 8

以此类推

[email protected][email protected]*2 的值是即将要插入的(2的n次方)-1与已经插入的值的差值
1
1 2 差1
1 2 3 4 差2
1 2 3 4 5 6 7 8 差4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 差8
上面例子比较好理解,下面一行比上面一行多出来的数字减上面对应位置的数字差值相同,而且是层数的等比数列。
而下面一行多出的数字就是每次循环插入表中的数字


[email protected],不是真正的产生序列的长度。
  相关解决方案