首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 建立測試資料

     編輯:關於SqlServer

本文原內容為空,補充實務常用的測試資料產生技巧,供開發與測試人員參考。

1. 快速產生大量連續數字/日期

-- 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);

2. 產生隨機字串與數值

-- 隨機 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;

3. 從現有表抽樣建立測試表

-- 伯努利抽樣 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);

4. 建立模擬業務資料(客戶、訂單、明細)

-- 客戶 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;

5. 第三方工具與擴充

  • SQL Data Generator (Redgate):視覺化定義欄位規則、外鍵關聯、資料分布,生產級測試資料首選。
  • dbForge Data Generator:支援正則、外鍵感知、CSV 匯入。
  • Faker.NET / Bogus:.NET 單元測試專用,可在 C# 程式碼中產生實體物件並批次寫入。
  • tSQLt:資料庫單元測試框架,內建 Private_RandomString、Private_RandomDate 等輔助函數。

效能與清理提醒

  • 大量測試資料(>100 萬列)建議使用 BULK INSERT 或 BCP 匯入預備好的檔案,避免 T-SQL 迴圈效能低落。
  • 測試完成後務必 TRUNCATE TABLE 或 DROP TABLE 清理,釋放空間並避免干擾正式資料。
  • 若在共用開發庫,建議建立專用 Schema(如 test.)隔離測試物件。

掌握上述技巧,可在數分鐘內建立符合業務邏輯的測試資料集,大幅提升開發測試效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved