關於SQLServer2005的學習筆記——CTE遞迴和模擬測試資料
Oracle首先提供了一個dual的虛表
其次提供了一個Connect by語句,實現了虛表資料列的模擬
最後Oracle提供了強大的DBMS_RANDOM包進行相關隨機數的產生。
SELECT TRUNC(DBMS_RANDOM.VALUE(1,101)), DBMS_RANDOM.string('~',5), DBMS_RANDOM.string('l',5), DBMS_RANDOM.string('L',5), DBMS_RANDOM.string('a',5), DBMS_RANDOM.string('A',5), DBMS_RANDOM.string('u',5), DBMS_RANDOM.string('U',5), DBMS_RANDOM.string('x',5), DBMS_RANDOM.string('X',5), DBMS_RANDOM.string('p',5), DBMS_RANDOM.string('P',5) from ( SELECT level,ROWNUM rn FROM DUAL CONNECT BY ROWNUM<=1001 ) |
相比而言,SQLServer則沒那麼幸運了,首先沒有虛擬的概念,則需要構建一個物理表以儲存需要模擬的次數,再次需要使用CTE遞迴來模擬一個虛表資料,最後才透過相關隨機函式進行構建資料。
--建立一個物理表,並插入要模擬的次數,最大不能超過32767
CREATE TABLE RandTable ( MaxNumber INT CHECK (MaxNumber >= 0 AND MaxNumber<=32767), ) INSERT INTO RandTable values(32767); |
--使用CTE遞迴構建列資料
WITH AutoSequence(MaxNumber,Identiy) AS ( SELECT e.MaxNumber,1 AS Identiy FROM RandTable AS e UNION ALL SELECT e.MaxNumber,Identiy+1 c FROM RandTable AS e,AutoSequence d WHERE d.Identiy ) |
--用時間+遞增值做種子進行RAND
SELECT LEFT(NEWID(),4), RAND((DATEPART(mm,GETDATE())*100000)+(DATEPART(ss,GETDATE())*1000)+DATEPART(ms,GETDATE())), RAND(Identiy+(DATEPART(mm,GETDATE())*100000)+(DATEPART(ss,GETDATE())*1000)+DATEPART(ms,GETDATE())), CAST(RIGHT(CAST(RAND(Identiy+CAST(GETDATE() AS INT)) AS VARCHAR(100)),2) AS INT), CAST(RIGHT(CAST(RAND(Identiy+(DATEPART(mm,GETDATE())*100000)+(DATEPART(ss,GETDATE())*1000)+DATEPART(ms,GETDATE())) AS VARCHAR(100)),2) AS INT) FROM AutoSequence OPTION (MAXRECURSION 32767); SELECT LEFT(NEWID(),4), CAST(RIGHT(CAST(RAND(Identiy+CAST(GETDATE() AS INT)) AS VARCHAR(100)),2) AS INT) FROM AutoSequence OPTION (MAXRECURSION 32767);
|
小結:
使用CTE遞迴和SQLServer隨機函式還是存在很多問題的。
1、一定需要構建一種物理表
2、CTE遞迴限制在0 到 32,767 之間
3、RAND產生的隨機數比較集中,透過時間+遞增值的方式來實現的話,只能擷取後幾位,導致無法控制隨機值的區域。
4、NEWID()產生的隨機數為字元和數字混雜,也不能得到預期的效果
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-624873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料結構學習筆記-遞迴求解森林高度資料結構筆記遞迴
- 使用 seed 命令建立模擬資料(學習筆記)筆記
- Proteus模擬學習筆記筆記
- 模擬退火學習筆記筆記
- 模擬退火 學習筆記筆記
- 大資料測試學習筆記之測試工具集大資料筆記
- C++ 學習筆記(2):String、遞迴、排序C++筆記遞迴排序
- Python零基礎學習筆記(三十八)——遞迴方法、棧、佇列模擬遍歷目錄Python筆記遞迴佇列
- kingbase SQL最佳化案例 ( union遞迴 改 cte遞迴 )SQL遞迴
- 學習筆記之測試筆記
- 關於http(自己的學習筆記)HTTP筆記
- Myth 關於Git的學習筆記Git筆記
- 模擬積體電路學習筆記筆記
- java的geojson格式測試資料模擬JavaJSON
- 第一章 遞迴問題 學習筆記遞迴筆記
- 【軟體測試】學習筆記筆記
- Jest 測試框架使用的學習筆記框架筆記
- Python3學習筆記4 , 迴圈、模組Python筆記
- web前端教程之JavaScript學習筆記之遞迴函式Web前端JavaScript筆記遞迴函式
- 基於sklearn的波士頓房價預測_線性迴歸學習筆記筆記
- JMM測試利器-JCStress學習筆記筆記
- 學習筆記——機器學習演算法(一): 基於邏輯迴歸的分類預測筆記機器學習演算法邏輯迴歸
- 關於遞迴和回溯的一次深入思考遞迴
- 「學習筆記」迴圈、列表筆記
- golang學習筆記(一)——golang基礎和相關資料結構Golang筆記資料結構
- MYSQL: 表表示式(CTE)實現遞迴例項MySql遞迴
- SQL Server2005使用CTE實現遞迴QCSQLServer遞迴
- 資料庫學習筆記資料庫筆記
- 發那科數控機床FanucCNC(NCGuide)模擬模擬器配置和資料採集測試GUIIDE
- Allure測試報告完整學習筆記測試報告筆記
- 關於django reset_framework學習之路的筆記DjangoFramework筆記
- 【Java資料結構與演算法筆記(二)】樹的四種遍歷方式(遞迴&非遞迴)Java資料結構演算法筆記遞迴
- Python學習筆記-StatsModels 統計迴歸(3)模型資料的準備Python筆記模型
- 關於Sql server資料型別HierarchyID 資料型別用法和遞迴顯示完整路徑SQLServer資料型別遞迴
- 軟體測試學習教程—迴歸測試
- node事件迴圈學習筆記事件筆記
- 以太坊學習筆記————12、搭建測試網路和私有鏈筆記
- 基於python的大資料分析實戰學習筆記-AnacondaPython大資料筆記
- 遞迴轉非遞迴 棧模擬 Recursive to Non-recursive stack simulated 總結遞迴