麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SqlServer 2005 T-SQL Query 學(xué)習(xí)筆記(4)

2024-08-31 01:01:28
字體:
供稿:網(wǎng)友
比如,我要建立一個(gè)1,000,000行的數(shù)字表:

CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
DECLARE @max AS INT, @rc AS INT;
SET @max = 1000000;
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;




這種方式非常巧妙,它并不是一個(gè)一個(gè)的循環(huán)插入,而是一次插入很多行,{1},{2},{3,4},{5,6,7,8}。。。



為什么這樣會(huì)快呢?

是因?yàn)樗?jié)省了跟比較其他可用解決方案進(jìn)行比較和記錄這些日志的時(shí)間。



然后,作者給了一個(gè)CTE的遞歸的解決方案:

DECLARE @n AS BIGINT;
SET @n = 1000000;

WITH Nums AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM Nums WHERE n < @n
)
SELECT n FROM Nums
OPTION(MAXRECURSION 0);--為了移除默認(rèn)100的遞歸限制


有個(gè)更優(yōu)的CTE的解決方案,就是先生成很多行,然后用ROW_NUMBER進(jìn)行計(jì)算,再選擇ROW_NUMBER這列的值就可以了。

復(fù)制代碼 代碼如下:


DECLARE @n AS BIGINT;
SET @n = 1000000;

WITH Base AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM Base WHERE n < CEILING(SQRT(@n))
),
Expand AS
(
SELECT 1 AS c
FROM Base AS B1, Base AS B2
),
Nums AS
(
SELECT ROW_NUMBER() OVER(ORDER BY c) AS n
FROM Expand
)
SELECT n FROM Nums WHERE n <= @n
OPTION(MAXRECURSION 0);



利用笛卡爾積進(jìn)行不斷的累加,達(dá)到了22n行。

最后,作者給出了一個(gè)函數(shù),用于生成這樣的數(shù)字表:

復(fù)制代碼 代碼如下:


CREATE FUNCTION dbo.fn_nums(@n AS BIGINT) RETURNS TABLE
AS
RETURN
WITH
L0 AS(SELECT 1 AS c UNION ALL SELECT 1),
L1 AS(SELECT 1 AS c FROM L0 AS A, L0 AS B),
L2 AS(SELECT 1 AS c FROM L1 AS A, L1 AS B),
L3 AS(SELECT 1 AS c FROM L2 AS A, L2 AS B),
L4 AS(SELECT 1 AS c FROM L3 AS A, L3 AS B),
L5 AS(SELECT 1 AS c FROM L4 AS A, L4 AS B),
Nums AS(SELECT ROW_NUMBER() OVER(ORDER BY c) AS n FROM L5)
SELECT n FROM Nums WHERE n <= @n;
GO

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: sm高h视频 | 日韩一级片免费 | 久久精品视频在线免费观看 | 亚洲精品久久久久久久久久久 | 91成人在线免费视频 | www.精品在线 | 黄色片免费在线 | 免费国产视频在线观看 | 久久国产夫妻视频 | 99亚洲伊人久久精品影院红桃 | 国产精品久久久久久久久久大牛 | 精品二区在线观看 | 国产精品久久久久久久午夜片 | 久久国产成人精品国产成人亚洲 | 成人h精品动漫一区二区三区 | 成人在线观看小视频 | 国产性tv国产精品 | 久久17| 日韩在线激情 | 国产成人在线一区二区 | 久久成人福利 | 毛片福利 | 成人福利在线观看 | 色淫视频 | 精品国产一区二区在线 | 亚洲片在线观看 | 欧美日韩国产成人在线观看 | h视频在线免费观看 | 午夜小网站 | 日韩一级电影在线观看 | 国产精品成人亚洲一区二区 | 在线成人www免费观看视频 | 欧美雌雄另类xxxxx | 成人18免费观看 | 一级电影免费看 | asiass极品裸体女pics | 91精品国产92久久久久 | 亚洲网站在线观看视频 | 九九精品久久 | 国产午夜精品久久久久婷 | 欧美日本国产精品 |