關於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於SQLServer2005的學習筆記——臨時表、表變數和CTESQLServer筆記變數
- 關於SQLServer2005的學習筆記(一)——前言SQLServer筆記
- 資料結構學習筆記-遞迴求解森林高度資料結構筆記遞迴
- 關於SQLServer2005的學習筆記——生日問題SQLServer筆記
- 關於SQLServer2005的學習筆記——子查詢SQLServer筆記
- 關於SQLServer2005的學習筆記——分析函式SQLServer筆記函式
- 使用 seed 命令建立模擬資料(學習筆記)筆記
- 關於SQLServer2005的學習筆記——XML的處理SQLServer筆記XML
- 關於SQLServer2005的學習筆記——樹形結構SQLServer筆記
- 模擬退火 學習筆記筆記
- Proteus模擬學習筆記筆記
- 模擬退火學習筆記筆記
- 大資料測試學習筆記之測試工具集大資料筆記
- 關於SQLServer2005的學習筆記——SQL查詢解析步驟SQLServer筆記
- 關於SQLServer2005的學習筆記——自定義分組的實現SQLServer筆記
- 關於SQLServer2005的學習筆記——異常捕獲及處理SQLServer筆記
- 學習筆記之測試筆記
- 關於SQLServer2005的學習筆記——多觸發器執行問題SQLServer筆記觸發器
- Python零基礎學習筆記(三十八)——遞迴方法、棧、佇列模擬遍歷目錄Python筆記遞迴佇列
- 模擬積體電路學習筆記筆記
- java的geojson格式測試資料模擬JavaJSON
- 【軟體測試】學習筆記筆記
- 關於http(自己的學習筆記)HTTP筆記
- Jest 測試框架使用的學習筆記框架筆記
- 第一章 遞迴問題 學習筆記遞迴筆記
- 關於SQLServer2005的學習筆記——約束、Check、觸發器的執行順序SQLServer筆記觸發器
- swift 關於 toolbar 學習筆記Swift筆記
- 基於sklearn的波士頓房價預測_線性迴歸學習筆記筆記
- JMM測試利器-JCStress學習筆記筆記
- kingbase SQL最佳化案例 ( union遞迴 改 cte遞迴 )SQL遞迴
- SQL Server中CTE的另一種遞迴方式-從底層向上遞迴SQLServer遞迴
- 軟體測試學習筆記:測試點總結筆記
- Myth 關於Git的學習筆記Git筆記
- web前端教程之JavaScript學習筆記之遞迴函式Web前端JavaScript筆記遞迴函式
- 關於樹型結構資料遞迴查詢,轉非遞迴查詢的實現遞迴
- Oracle進行模擬測試資料的一個例子Oracle
- TensorFlow學習筆記(8):基於MNIST資料的迴圈神經網路RNN筆記神經網路RNN
- 軟體測試學習教程—迴歸測試