本文原內容為空,補充實務常用的測試資料產生技巧,供開發與測試人員參考。
-- 1 萬筆連續整數
WITH N AS (SELECT 1 AS n UNION ALL SELECT n+1 FROM N WHERE n < 10000)
SELECT n FROM N OPTION (MAXRECURSION 0);
-- 近 1 年每日日期
WITH D AS (SELECT CAST(DATEADD(DAY,-365,GETDATE()) AS DATE) AS dt
UNION ALL SELECT DATEADD(DAY,1,dt) FROM D WHERE dt < CAST(GETDATE() AS DATE))
SELECT dt FROM D OPTION (MAXRECURSION 0);
-- 隨機 8 碼英數字串
SELECT LEFT(NEWID(),8) AS rnd_str;
-- 隨機整數 1~1000
SELECT ABS(CHECKSUM(NEWID())) % 1000 + 1 AS rnd_int;
-- 隨機日期(近 30 天)
SELECT DATEADD(DAY, -ABS(CHECKSUM(NEWID())) % 30, GETDATE()) AS rnd_date;
-- 伯努利抽樣 10%
SELECT * INTO Test_Sample FROM SourceTable WHERE CAST(CHECKSUM(NEWID(), Id) & 0x7FFFFFFF AS FLOAT) / 2147483647.0 < 0.1;
-- 系統抽樣(依頁面,快但非嚴格隨機)
SELECT * INTO Test_System FROM SourceTable TABLESAMPLE SYSTEM (10 PERCENT);
-- 客戶 1000 筆
WITH C AS (
SELECT TOP 1000
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS CustId,
N'客戶' + RIGHT('0000'+CAST(ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS VARCHAR),4) AS CustName,
DATEADD(DAY, -ABS(CHECKSUM(NEWID())) % 1000, GETDATE()) AS RegDate
FROM sys.objects a CROSS JOIN sys.objects b
)
SELECT * INTO dbo.Test_Customers FROM C;
-- 訂單每客戶 1~5 筆
WITH O AS (
SELECT
c.CustId,
ROW_NUMBER() OVER (PARTITION BY c.CustId ORDER BY (SELECT NULL)) AS Seq,
DATEADD(DAY, -ABS(CHECKSUM(NEWID())) % 365, GETDATE()) AS OrderDate,
ABS(CHECKSUM(NEWID())) % 10000 + 100 AS Amount
FROM dbo.Test_Customers c
CROSS APPLY (SELECT TOP (ABS(CHECKSUM(NEWID())) % 5 + 1) 1 AS x FROM sys.objects) n
)
SELECT * INTO dbo.Test_Orders FROM O;
Private_RandomString、Private_RandomDate 等輔助函數。BULK INSERT 或 BCP 匯入預備好的檔案,避免 T-SQL 迴圈效能低落。TRUNCATE TABLE 或 DROP TABLE 清理,釋放空間並避免干擾正式資料。test.)隔離測試物件。掌握上述技巧,可在數分鐘內建立符合業務邏輯的測試資料集,大幅提升開發測試效率。