You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中生成1000条测试用系列数据?

嘿,我来给你几个不同数据库环境下生成1000条Product1到Product1000测试数据的实用方案,你可以根据自己用的数据库选对应的写法~

针对不同数据库的解决方案

MySQL/MariaDB(8.0及以上版本)

如果你的数据库支持递归CTE(Common Table Expression),用这个写法最直观:

WITH RECURSIVE product_list AS (
    -- 起始行:生成第一条Product1
    SELECT 1 AS num, CONCAT('Product', 1) AS product_name
    UNION ALL
    -- 递归生成后续的ProductN,直到num达到1000
    SELECT num + 1, CONCAT('Product', num + 1)
    FROM product_list
    WHERE num < 1000
)
-- 输出所有产品名,要是想插入表的话,把SELECT改成INSERT INTO your_table (column_name) SELECT ...
SELECT product_name FROM product_list;

PostgreSQL

PostgreSQL有个超方便的generate_series函数,一行就能搞定:

-- 直接生成1到1000的数字,拼接成ProductN
SELECT CONCAT('Product', generate_series(1, 1000)) AS product_name;

-- 如果要插入到表中,直接套INSERT语句
-- INSERT INTO your_table (column_name) SELECT CONCAT('Product', generate_series(1, 1000));

当然你也可以用递归CTE,写法和MySQL类似,但generate_series显然更简洁。

SQL Server

SQL Server的递归CTE需要注意设置递归深度(默认是100,超过要手动指定):

WITH product_list AS (
    SELECT 1 AS num, 'Product' + CAST(1 AS VARCHAR(4)) AS product_name
    UNION ALL
    SELECT num + 1, 'Product' + CAST(num + 1 AS VARCHAR(4))
    FROM product_list
    WHERE num < 1000
)
SELECT product_name FROM product_list
OPTION (MAXRECURSION 1000); -- 必须设置,否则会因为递归深度不够报错

-- 另一种方法是用系统表生成数字,适合低版本SQL Server
-- SELECT 'Product' + CAST(number AS VARCHAR(4)) AS product_name
-- FROM master..spt_values
-- WHERE type = 'P' AND number BETWEEN 1 AND 1000;

Oracle

Oracle用CONNECT BY语法可以快速生成序列数据:

-- 利用LEVEL伪列生成1到1000的数字,拼接成ProductN
SELECT 'Product' || LEVEL AS product_name
FROM dual
CONNECT BY LEVEL <= 1000;

-- 插入表的写法:
-- INSERT INTO your_table (column_name) SELECT 'Product' || LEVEL FROM dual CONNECT BY LEVEL <= 1000;

额外需求:生成一行包含所有ProductN(用空格分隔)

如果你不是要1000条单独的记录,而是要一行里把Product1 Product2 ... Product1000全部列出来,那可以用字符串聚合函数:

  • MySQL/MariaDB:用GROUP_CONCAT
WITH RECURSIVE product_list AS (
    SELECT 1 AS num, CONCAT('Product', 1) AS product_name
    UNION ALL
    SELECT num + 1, CONCAT('Product', num + 1)
    FROM product_list
    WHERE num < 1000
)
SELECT GROUP_CONCAT(product_name SEPARATOR ' ') AS all_products FROM product_list;
  • PostgreSQL:用STRING_AGG
SELECT STRING_AGG(CONCAT('Product', generate_series(1, 1000)), ' ') AS all_products;
  • SQL Server:用STRING_AGG
WITH product_list AS (
    SELECT 1 AS num, 'Product' + CAST(1 AS VARCHAR(4)) AS product_name
    UNION ALL
    SELECT num + 1, 'Product' + CAST(num + 1 AS VARCHAR(4))
    FROM product_list
    WHERE num < 1000
)
SELECT STRING_AGG(product_name, ' ') AS all_products FROM product_list
OPTION (MAXRECURSION 1000);
  • Oracle:用LISTAGG
SELECT LISTAGG('Product' || LEVEL, ' ') WITHIN GROUP (ORDER BY LEVEL) AS all_products
FROM dual
CONNECT BY LEVEL <= 1000;

内容的提问来源于stack exchange,提问作者Pankaj_S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:19