婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SqlServer 2005 T-SQL Query 學習筆記(4)

SqlServer 2005 T-SQL Query 學習筆記(4)

熱門標簽:高德地圖標注電話怎么沒了 智能電銷機器人教育 無錫梁溪公司怎樣申請400電話 北京智能外呼系統(tǒng)供應商家 電話機器人錄音師薪資 奧維地圖標注字體大小修改 孝感銷售電銷機器人廠家 江西穩(wěn)定外呼系統(tǒng)供應商 中國地圖標注省份用什么符號
比如,我要建立一個1,000,000行的數字表:

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;




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



為什么這樣會快呢?

是因為它節(jié)省了跟比較其他可用解決方案進行比較和記錄這些日志的時間。



然后,作者給了一個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);--為了移除默認100的遞歸限制


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

復制代碼 代碼如下:

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);


利用笛卡爾積進行不斷的累加,達到了22n行。

最后,作者給出了一個函數,用于生成這樣的數字表:
復制代碼 代碼如下:

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
您可能感興趣的文章:
  • SQLServer用t-sql命令批量刪除數據庫中指定表(游標循環(huán)刪除)
  • 如何在SQL Server 2008下輕松調試T-SQL語句和存儲過程
  • SQL Server中的T-SQL的基本對象
  • SqlServer 2005 T-SQL Query 學習筆記(3)
  • SqlServer 2005 T-SQL Query 學習筆記(2)
  • SqlServer 2005 T-SQL Query 學習筆記(1)
  • SQLServer 2008 新增T-SQL 簡寫語法
  • SQL Server 數據庫管理常用的SQL和T-SQL語句
  • SQL Server 數據庫管理常用的SQL和T-SQL語句
  • SQL Server 數據庫管理常用的SQL和T-SQL語句
  • T-sql語句修改SQL Server數據庫邏輯名、數據庫名、物理名的方法

標簽:臨滄 海北 那曲 荊州 泰州 齊齊哈爾 阜陽 通化

巨人網絡通訊聲明:本文標題《SqlServer 2005 T-SQL Query 學習筆記(4)》,本文關鍵詞  SqlServer,2005,T-SQL,Query,學習,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SqlServer 2005 T-SQL Query 學習筆記(4)》相關的同類信息!
  • 本頁收集關于SqlServer 2005 T-SQL Query 學習筆記(4)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 修水县| 油尖旺区| 峨山| 江津市| 密云县| 宣威市| 宁陕县| 罗田县| 南溪县| 津南区| 肇源县| 同仁县| 定兴县| 洛扎县| 拉孜县| 宽甸| 鹤岗市| 镇安县| 许昌县| 隆化县| 南郑县| 澄城县| 西乌珠穆沁旗| 辽阳县| 枣庄市| 泉州市| 新龙县| 象山县| 哈尔滨市| 吉安县| 罗定市| 合肥市| 伊宁县| 上杭县| 塔城市| 荆门市| 东乡| 乌拉特前旗| 同仁县| 南开区| 铁力市|