亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

SQL Server 實現數字輔助表實例代碼

2024-08-31 01:04:15
字體:
來源:轉載
供稿:網友

數字輔助表是一個連續整數的數列,通常用來實現多種不同的查詢任務。大多分兩類:足夠大物理數字表和表函數,前者可以稱為靜態的,后者可以稱為動態且按需生產。

物理數字表

    物理數字表通常存在一個物理表,表記錄相對足夠大,相關的T-SQL代碼如下:

IF OBJECT_ID(N'dbo.Nums', 'U') IS NOT NULLBEGIN  DROP TABLE dbo.Nums;ENDGO CREATE TABLE dbo.Nums (  Num INT NOT NULL,  CONSTRAINT PK_U_CL_Nums_Num PRIMARY KEY CLUSTERED  (    Num ASC  ) );GO INSERT INTO dbo.Nums (Num)SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNumFROM master.dbo.spt_values;GO

注意:如何填充物理數字表的方法很多,為了演示作用使用了一種。

測試的T-SQL代碼如下:

1 SELECT Num2 FROM dbo.Nums;3 GO

執行后的查詢結果如下:

SQL,Server,數字輔助表,數字輔助表實現代碼,數字輔助表詳解

 表函數

    表函數實現使用交叉連接和CTE,SQL Server 2005和以上版本的T-SQL代碼如下:

IF OBJECT_ID(N'dbo.ufn_GetNums', N'IF') IS NOT NULLBEGIN  DROP TABLE dbo.ufn_GetNums;ENDGO --==================================-- 功能: 獲取指定范圍的數字數列-- 說明: 交叉最后層級的CTE得到的數據行:在L級(從0開始計數)得到的行的總數為2^2^L。--    例如:在5級就會得到4 294 967 596行。5級的CTE提供了超過40億的行。-- 作者: XXX-- 創建: yyyy-MM-dd-- 修改: yyyy-MM-dd XXX 修改內容描述--==================================CREATE FUNCTION dbo.ufn_GetNums(  @bintLow BIGINT,  @bintHigh BIGINT) RETURNS TABLEASRETURN   WITH    L0 AS (SELECT c FROM (VALUES(1), (1)) AS LO(c)),    L1 AS (SELECT 1 AS c FROM L0 AS T CROSS JOIN L0 AS T2),    L2 AS (SELECT 1 AS c FROM L1 AS T CROSS JOIN L1 AS T2),    L3 AS (SELECT 1 AS c FROM L2 AS T CROSS JOIN L2 AS T2),    L4 AS (SELECT 1 AS c FROM L3 AS T CROSS JOIN L3 AS T2),    L5 AS (SELECT 1 AS c FROM L4 AS T CROSS JOIN L4 AS T2),    Nums AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM L5)   SELECT TOP (@bintHigh - @bintLow + 1) @bintLow + RowNum - 1 AS Num  FROM Nums  ORDER BY RowNum ASC;GO

    SQL Server 2012增加了有關分頁的新特性,相關的T-SQL代碼如下:

IF OBJECT_ID(N'dbo.ufn_GetNums2', N'IF') IS NOT NULLBEGIN  DROP TABLE dbo.ufn_GetNums2;ENDGO --==================================-- 功能: 獲取指定范圍的數字數列-- 說明: 交叉最后層級的CTE得到的數據行:在L級(從0開始計數)得到的行的總數為2^2^L。--    例如:在5級就會得到4 294 967 596行。5級的CTE提供了超過40億的行。 -- 作者: XXX-- 創建: yyyy-MM-dd-- 修改: yyyy-MM-dd XXX 修改內容描述--==================================CREATE FUNCTION dbo.ufn_GetNums2(  @bintLow BIGINT,  @bintHigh BIGINT) RETURNS TABLEASRETURN   WITH    L0 AS (SELECT c FROM (VALUES(1), (1)) AS LO(c)),    L1 AS (SELECT 1 AS c FROM L0 AS T CROSS JOIN L0 AS T2),    L2 AS (SELECT 1 AS c FROM L1 AS T CROSS JOIN L1 AS T2),    L3 AS (SELECT 1 AS c FROM L2 AS T CROSS JOIN L2 AS T2),    L4 AS (SELECT 1 AS c FROM L3 AS T CROSS JOIN L3 AS T2),    L5 AS (SELECT 1 AS c FROM L4 AS T CROSS JOIN L4 AS T2),    Nums AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum FROM L5)   SELECT @bintLow + RowNum - 1 AS Num  FROM Nums  ORDER BY RowNum ASC  OFFSET 0 ROWS FETCH FIRST @bintHigh - @bintLow + 1 ROWS ONLY;GO

以函數ufn_GetNums為例,演示相關的效果。獲取指定范圍的數字序列的T-SQL代碼如下:

SELECT NumFROM dbo.ufn_GetNums(11, 20);GO

執行后的查詢結果如下:

SQL,Server,數字輔助表,數字輔助表實現代碼,數字輔助表詳解
 

博友如有其他更好的解決方案,也請不吝賜教,萬分感謝。

參考清單列表

1、《Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions》 作者 Itzik Ben-Gan(美國)(SQL Server Inside 有關書籍的作者)

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到MSSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久香蕉国产线看观看网| 精品国产一区二区三区久久久| 国产91色在线免费| 久久影院中文字幕| 亚洲人成网站777色婷婷| 热门国产精品亚洲第一区在线| 自拍视频国产精品| 亚洲美女在线看| 日韩视频精品在线| 国产精品999999| 国产精品老女人精品视频| 久久久伊人欧美| 国产精品美女无圣光视频| 国模视频一区二区三区| 日韩中文字幕在线| 国产福利视频一区| 日韩国产精品一区| 久久久久久综合网天天| 亚洲精品自产拍| 欧美日韩成人免费| 亚洲欧美999| 亚洲精品国产品国语在线| 国产999精品久久久影片官网| 午夜精品一区二区三区av| 日本19禁啪啪免费观看www| 国产精品美女主播| 欧美电影在线观看完整版| 最新的欧美黄色| 亚洲成人免费在线视频| 性亚洲最疯狂xxxx高清| 91九色蝌蚪国产| 91在线免费看网站| 中文字幕精品国产| 国产成人91久久精品| 在线中文字幕日韩| 97国产真实伦对白精彩视频8| 欧美成人免费在线视频| 国产精品96久久久久久又黄又硬| 国产主播精品在线| 欧美怡红院视频一区二区三区| 亚洲理论在线a中文字幕| 97精品在线观看| 日韩中文字幕在线播放| 亚洲美女自拍视频| 日韩av网址在线| 成人免费直播live| 国产精品va在线播放| 久久久国产一区二区| 亚洲精品国产精品国自产观看浪潮| 日韩精品视频中文在线观看| 日韩在线视频导航| 成人免费在线视频网站| 久久久噜噜噜久久| 日韩成人在线视频观看| 中文字幕无线精品亚洲乱码一区| 久热爱精品视频线路一| 国产成人一区三区| 成人网在线免费观看| 久久久久99精品久久久久| 国产精品视频网站| 亚洲香蕉成视频在线观看| 国产精品中文字幕在线观看| 日韩中文视频免费在线观看| 国产精品久久久久久久久久久久久久| 色综合老司机第九色激情| www国产精品com| 日韩欧美一区二区三区久久| 午夜精品久久久99热福利| 亚洲欧洲日韩国产| 91精品视频网站| 久久久国产一区二区三区| 超薄丝袜一区二区| 久久人人爽人人爽人人片av高请| 国产精品免费网站| 精品美女国产在线| 中文字幕精品av| 亚洲美女福利视频网站| 91精品国产高清自在线| 欧美日韩在线第一页| 亚洲国产精品电影| 国产精品美女久久久久久免费| 午夜精品理论片| 亚洲午夜精品视频| 日韩欧美国产中文字幕| 欧美日韩在线另类| 国产精品视频网址| 精品国偷自产在线| 国产视频福利一区| 久久夜色精品国产亚洲aⅴ| 欧美亚洲伦理www| 色综合久久88色综合天天看泰| 精品国产成人在线| 亚洲综合中文字幕68页| 久久亚洲综合国产精品99麻豆精品福利| 黑人狂躁日本妞一区二区三区| 亚洲free性xxxx护士白浆| 成人免费看黄网站| 不卡在线观看电视剧完整版| 欧美激情中文字幕在线| 精品无人区太爽高潮在线播放| 久久久久久国产精品| 日本精品久久中文字幕佐佐木| 精品久久久久久| 国内精久久久久久久久久人| 亚洲aⅴ男人的天堂在线观看| 久色乳综合思思在线视频| 国产免费一区视频观看免费| 国产成人精品a视频一区www| 国产精品十八以下禁看| 国产精品视频精品| 欧美日韩高清区| 欧美一区二区影院| 亚洲美女视频网| 精品亚洲精品福利线在观看| 久久中文字幕国产| 日韩经典中文字幕在线观看| 成人午夜高潮视频| 91tv亚洲精品香蕉国产一区7ujn| 亚洲人成五月天| 成人午夜在线观看| 91精品成人久久| 97超碰蝌蚪网人人做人人爽| 国产日韩精品在线| 国产精品久久久久久久久久99| 欧美性一区二区三区| 亚洲国产日韩精品在线| 色偷偷av一区二区三区| 亚洲欧美一区二区激情| 亚洲欧洲国产精品| 久久久亚洲精品视频| 亚洲精品免费一区二区三区| 亚洲综合大片69999| 亚洲欧美一区二区三区四区| 日韩美女福利视频| 欧美成人自拍视频| 欧洲精品在线视频| 韩国三级电影久久久久久| 日韩电影中文字幕一区| 亚洲视频欧洲视频| 高清欧美一区二区三区| 九九视频这里只有精品| 国产精品中文字幕久久久| 国产精品啪视频| 亚洲自拍欧美另类| 国产久一一精品| 欧美日韩国产综合视频在线观看中文| 最近2019年日本中文免费字幕| 中文字幕一区二区精品| 久久久999精品免费| 亚洲免费影视第一页| 一个色综合导航| 97久久超碰福利国产精品…| 欧美不卡视频一区发布| 日韩高清电影免费观看完整| 国产aⅴ夜夜欢一区二区三区| 久久久噜噜噜久久久| 国产极品jizzhd欧美| 亚洲大胆人体在线| 91精品国产777在线观看| 91亚洲人电影| 欧美成人免费在线视频| 欧美黑人极品猛少妇色xxxxx| 亚洲第一中文字幕| 久久精品美女视频网站|