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

首頁 > 開發 > 綜合 > 正文

【SQL】分享表值函數FMakeRows,用于生成行

2024-07-21 02:48:06
字體:
來源:轉載
供稿:網友
【SQL】分享表值函數FMakeRows,用于生成行

------------更新:201501071730------------

評論中又有一位【笑東風】兄給出改善建議,在此先感謝他。原理是借助行數較多的一個系統視圖sys.all_columns與自身做cross join,以得到大量現成行數,詳情請見回復。在我的原文中我也提到考慮過這種借助現有系統對象得到行的方法,但我想當然認為這樣會導致訪問基礎表,性能不會好,所以試都沒試就pass了,但事實證明我錯了,他的法子經測性能比倍增法好太多,再次自我教訓,實踐才是硬道理?。?!再次感謝【笑東風】兄。最終實現如下:

/*----------------------函數:生成行 0.01Author:AhDungUpdate:201412310925----------------------*/CREATE FUNCTION dbo.FMakeRows(@num INT)RETURNS TABLERETURN (SELECT TOP (CASE WHEN @num IS NULL OR @num<0 THEN 0 ELSE @num END) ROW_NUMBER() OVER(ORDER BY a.object_id) AS 'RowNo'FROM sys.all_columns a CROSS JOIN sys.all_columns b)

------------更新:201501061241------------

評論中有朋友提到不如用with,我理解他說的是CTE遞歸,在此先感謝一下這位【空紫竹】兄提出建議。遂試了下用CTE實現,代碼如下:

CREATE FUNCTION dbo.FMakeRows2(@num INT)RETURNS TABLERETURN (WITH cte AS (SELECT 1 AS 'RowNo',1 AS 'Lv'UNION ALLSELECT RowNo+Lv,Lv*2 FROM cte WHERE RowNo+Lv<=@numUNION ALLSELECT RowNo+Lv*2,Lv*2 FROM cte WHERE RowNo+Lv*2<=@num)SELECT RowNo FROM cte)

功能一樣,原理是遞歸倍增,語句變少了,但性能比不上原文的方法,16384行上述方法要400ms左右,與逐行法差不多,而原文方法只要140ms,所以算不上好方法,權當學習一下CTE遞歸知識。如果我的實現有問題,還望路過大俠指點,謝謝。

------------原文:201412311300------------

作用:傳入整數x,返回一張x行的表,只有一列RowNo,存儲各行序號。

對于這個需求,我先是找有沒有現成的函數或過程,結果是沒找到,如果路過的朋友知道,還望告知,謝謝。

使用示例:

至于該函數具體可以應用到哪些場景,只可意會,需要的人自然覺得有用,覺得沒用的說明不需要。上代碼:

/*----------------------函數:生成行 0.01Author:AhDungUpdate:201412310925----------------------*/ALTER FUNCTION dbo.FMakeRows(@num INT)RETURNS @t TABLE (RowNo INT)BEGINIF @num IS NULL OR @num <= 0 RETURNINSERT @t VALUES(1)DECLARE @no INT = 1WHILE @no*2 <= @numBEGININSERT @t SELECT RowNo+@no FROM @tSET @no *= 2ENDINSERT @t SELECT TOP (@num-@no) RowNo+@no FROM @tRETURNEND

實現說明:原理是先給@t塞一個初始行,完了循環insert自身,如此1變2、2變4、4變萬物……,每一圈后@t的行數都是上一圈的2倍,直到行數x2大于所需行數(@num)前打住,即要把行數控制在小于等于@num的范圍內,最后從現有行中抽取一部分補齊所差的行。例如,需要的行數是13,轉到3圈后,@t有8行,就要打住了,因為再轉就成16行了,8距離13所差的5行最后通過從@t中抽取top 5補齊。

實現該函數一開始想到的是根據@num循環,每圈插一行,需要幾行就轉幾圈(逐行法),邏輯很簡單,但這樣做很老實,事實證明效率也不如上述方法(行數倍增),兩種方法經測試到500行時就有明顯差異了,到16384行時,倍增法在140ms左右,逐行法400ms左右,我想原因就是倍增法大大減少了循環圈數,16384行只需轉14圈,而逐行法要老老實實轉足16384圈吶~怕怕。

也想過從某個必定存在的系統表/視圖獲取行,如sys.objects,但這樣會訪問基礎表,即使你根本不select它的任何字段,這樣性能必然不如純內存操作來的好,試都不用試。再說也不地道,作為函數,依賴越少越健壯。

路過朋友如有更好方法,還請不吝賜教,非常感謝。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
岛国视频午夜一区免费在线观看| 精品视频—区二区三区免费| 欧美日韩国产精品专区| 日韩美女在线观看一区| 久久久亚洲国产天美传媒修理工| 欧美亚洲激情在线| 成人av.网址在线网站| 一区二区日韩精品| 日本不卡高字幕在线2019| 日韩成人网免费视频| 成人久久久久久久| 国产精品91久久久| 岛国av一区二区在线在线观看| 免费不卡欧美自拍视频| 欧美限制级电影在线观看| 国产精品狠色婷| 欧美另类极品videosbest最新版本| 久久九九全国免费精品观看| 欧美另类极品videosbestfree| 色综合久久久888| 91精品久久久久久综合乱菊| 欧美有码在线观看| 日本最新高清不卡中文字幕| 热99精品只有里视频精品| www.xxxx欧美| 久99九色视频在线观看| 久久精品久久久久| 久久久精品在线观看| 日韩中文字幕视频在线观看| 午夜精品久久久久久99热软件| 午夜精品理论片| 欧美一级片在线播放| 欧美电影免费看| 欧美精品电影免费在线观看| 久热精品在线视频| 欧美激情中文字幕乱码免费| 久久久久久一区二区三区| 久久这里只有精品视频首页| 日韩中文字幕在线看| 亚洲欧美国产视频| 中文字幕日韩在线观看| 2019日本中文字幕| 久久精品国产成人| 亚洲福利在线播放| 韩剧1988在线观看免费完整版| 尤物九九久久国产精品的特点| 欧美做受高潮1| 亚洲国产日韩欧美在线99| 亚洲免费小视频| 日韩亚洲精品视频| 欧美大片在线免费观看| xvideos亚洲| 欧美日韩中文字幕综合视频| 国产精品视频地址| 欧美午夜宅男影院在线观看| 川上优av一区二区线观看| 国产精品欧美日韩一区二区| 国模精品一区二区三区色天香| 一级做a爰片久久毛片美女图片| 中文字幕精品久久久久| 久久亚洲一区二区三区四区五区高| 亚洲一区二区久久| 久久久免费av| 91在线精品视频| 中文字幕日韩欧美在线| 国产精品极品尤物在线观看| 欧美在线一级视频| 亚洲一区二区久久久| 色偷偷9999www| 国产精品黄色av| 亚洲国产成人久久| 一区二区三区在线播放欧美| 欧美国产精品日韩| 久久影院中文字幕| 欧美黑人xxx| 成人黄色av网站| 成人免费网视频| 欧美色videos| 亚洲国产精品一区二区久| 九九久久综合网站| 欧美一级在线亚洲天堂| 欧美日韩在线观看视频| 亚洲片国产一区一级在线观看| 国产成人91久久精品| 欧美天天综合色影久久精品| 国产精品久久久999| 一区二区三区视频免费在线观看| 欧美精品videosex牲欧美| 欧美激情videos| 色悠久久久久综合先锋影音下载| 国产精品久久激情| 亚洲人成电影网站色xx| 国产亚洲成精品久久| 亚洲人成亚洲人成在线观看| 国产精品一区二区三| 91在线国产电影| 人九九综合九九宗合| 欧美国产亚洲精品久久久8v| 日韩欧美中文字幕在线观看| 国产精品日日做人人爱| 一区二区三区国产视频| 欧美极品美女视频网站在线观看免费| 日韩av中文字幕在线| 亚洲成av人影院在线观看| 欧美性视频网站| 亚洲精品一区二区网址| 久久久在线观看| 亚洲图片制服诱惑| 在线性视频日韩欧美| 国产精品99久久久久久人| 91在线观看欧美日韩| 亚洲精品一区在线观看香蕉| 国产精品∨欧美精品v日韩精品| 久久艳片www.17c.com| 国产一区在线播放| 欧美成人午夜免费视在线看片| 精品国产一区久久久| 亚洲精品av在线播放| 国产欧洲精品视频| 欧美一区第一页| 日韩av免费在线看| 日韩电影网在线| 久久99青青精品免费观看| 5252色成人免费视频| 亚洲开心激情网| 91夜夜未满十八勿入爽爽影院| 久久精品国产96久久久香蕉| 亚洲色图激情小说| 久久精品99久久香蕉国产色戒| 日韩精品丝袜在线| 欧美日本亚洲视频| 欧美大片免费观看| 亚州欧美日韩中文视频| 欧美国产第一页| 2019日本中文字幕| 姬川优奈aav一区二区| 国产精品久久在线观看| 精品露脸国产偷人在视频| 最近中文字幕mv在线一区二区三区四区| 亚洲精品美女在线观看播放| 亚洲最大福利视频网站| 国产亚洲欧美aaaa| 精品久久久久久久久久久久| 国产精品美女久久| 中文国产成人精品久久一| 欧美肥老太性生活视频| 欲色天天网综合久久| 精品国产成人在线| 日韩欧美a级成人黄色| 91中文字幕在线| 国产欧美日韩精品丝袜高跟鞋| 欧美性猛交xxxx久久久| 久99九色视频在线观看| 1769国内精品视频在线播放| 欧美高清性猛交| 日韩大陆欧美高清视频区| 亚洲欧美国产一区二区三区| 国产精品久久久av久久久| 中文字幕日韩欧美在线| 国产精品海角社区在线观看| 欧美激情手机在线视频| 日本久久久久久久久久久| 成人黄色中文字幕| 91久久在线观看|