日期:2014-05-18  浏览次数:20575 次

分享:《SQLSERVER2005技术内幕——T-SQL》实例!!!!
SQL code


快速生成一个数据表,只有一列,这一列的值从1到8000,
sql只需要执行14次
(第一条sql插入数据1,后面12次把2的12次方4096以内的数据插入,后面剩下的8000-4096个数字一次生成)
而不是8000次:
语句如下:
----------------------------------------------------------
SET NOCOUNT ON;
USE tempdb;
GO
IF OBJECTID(“dbo.Nums“) IS NOT NULL
  DROP TABLE dbo.Nums;
GO
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 8000;
SET @rc = 1;

INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
BEGIN
  INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
  SET @rc = @rc * 2;
END

INSERT INTO dbo.Nums 
  SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
GO
------------------
--载自http://www.cnblogs.com/zuoqs/archive/2010/01/24/1655451.html,作者:左其盛




本屌丝刚刚做了个实验吓尿了,因此,不明白为什么@左其盛老师说他的比@周强老师快:结果如下:

1.循环,楼上(benbenLY)屌丝的代码:(做了点修改)

DECLARE @i INT
set @i=1
WHILE @i<8000
BEGIN
  INSERT INTO Nums SELECT @i
  SET @i=@i+1
END
执行结果:
--------------------------------


2.@左老师代码
(见楼上)
执行结果:
--------------------------------

3.@周强老师代码
(见楼上)
执行结果:
-----------------------------------


这其中的差距还是蛮大的,我看到的结果是:@周强老师的速度是最快的,循环当然必须是最慢的,可是,在博客中看到@左老师与@周老师的互动,@左老师说通过验证,他的是最快的。有点疑惑!!!


------解决方案--------------------
收了,多谢,呵呵。。。
------解决方案--------------------
算法. 学习....
------解决方案--------------------
上面这个算法效率却是很高
------解决方案--------------------
膜拜
------解决方案--------------------
 

太高深了。
------解决方案--------------------
不错,支持一下
效率上估计比这个要好很多。

SQL code
insert into Nums
select top 8000 row_number() over (order by (select 1)) from sysobjects,syscolumns

------解决方案--------------------
探讨
IF OBJECTID(“dbo.Nums“) IS NOT NULL
DROP TABLE dbo.Nums;

------解决方案--------------------
感谢分享,算法是学习了~;

可是实际效率没有那么好吧? 
感觉没有下面的语句快,估计是因为上面代码中有计算的缘故,也或者是我的理解有误..

SQL code

DECLARE @i INT =1 
WHILE @i<8000
BEGIN
    INSERT INTO Nums SELECT @i
    SET @i=@i+1
END

------解决方案--------------------
探讨
本屌丝刚刚做了个实验吓尿了,因此,不明白为什么@左其盛老师说他的比@周强老师快:结果如下:

1.循环,楼上(benbenLY)屌丝的代码:(做了点修改)

DECLARE @i INT
set @i=1
WHILE @i<8000
BEGIN
INSERT INTO Nums SELECT @i
SET @i=@i+1
END
执行结果:
------------……

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

呼叫:maco_wang求收私信。