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<=@max --循环
begin --开始
insert into #b select @rc+n from #b --插入数据
set @rc=@rc*2 --赋值
end --结束
go
问下,SET @RC=@RC*2 这里是何用意,
insert into #b select @rc+n from #b --插入数据
这段@RC+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
你把已插入表里的所有记录,字段n加上@rc的值后插入表中,结果肯定是翻倍的
你需要说明这段代码的用途,才知道怎么改
------解决方案-------------------- 上面整个语句的作用是生成整数序列,而且是成2的n次方的比例增长序列
SET @RC=@RC*2 用意是计算出下轮增长的差值,这也是成倍增长的原因
举个例子说
初始值赋值n=1
@RC = 1
要插入的下一个序列2比n大1,也就是@RC的值
插入后赋值@RC = @RC * 2 = 2
第二次进循环,表中有值1,2,要插入的值为3,4 而3-1=4-2=@RC = 2 ,插入值后赋值@RC = @RC * 2 = 4
第三次进循环,表中有值1,2,3,4,要插入的值5,6,7,8 而5-1=6-2=7-3=8-4=@RC= 4,插入值后赋值@RC = @RC * 2 = 8
以此类推
也即是说@RC=@RC*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
上面例子比较好理解,下面一行比上面一行多出来的数字减上面对应位置的数字差值相同,而且是层数的等比数列。
而下面一行多出的数字就是每次循环插入表中的数字
而@MAX限制的只是循环的次数,不是真正的产生序列的长度。