如何使用串联 ID 在 SQL Server 的循环中将表插入 N 次?

Posted

技术标签:

【中文标题】如何使用串联 ID 在 SQL Server 的循环中将表插入 N 次?【英文标题】:How can INSERT INTO a table N times within a loop in SQL Server using a concatenated ID? 【发布时间】:2021-05-06 17:36:45 【问题描述】:

我想在 SQL SERVER 中插入一个连接的 id 并重复 N 次。

其实我有这样的:

DECLARE @COUNT INT;
DECLARE @NUM_INSERTS INT;
SET @COUNT = 1;
SET @NUM_INSERTS = 10;

WHILE (@COUNT <= @NUM_INSERTS)
BEGIN
   DECLARE @randomID VARCHAR(2);  
   SET @randomID = CAST(ABS(CHECKSUM(NEWID()) % 10) AS VARCHAR(1)) + CAST(ABS(CHECKSUM(NEWID()) % 10) AS VARCHAR(1)); 

   SET @ID = CONCAT(@randomID,@COUNT); 

   INSERT INTO Table(ID, colB, colC, colD)
   SELECT 
      @ID,
      colB, 
      colC, 
      colD
   FROM #tempTable

   SET @COUNT = @COUNT + 1; 
END

另外,我想生成一个连接的 id

¿使用递归 CTE 可以做到这一点吗?

【问题讨论】:

【参考方案1】:

以下是使用递归 cte 和交叉应用的方法:

DECLARE @NUM_INSERTS INT;
SET @NUM_INSERTS = 10;

with cte as (
select 1 num
union all
select num+ 1 as num
from cte 
where num < @NUM_INSERTS
)

INSERT INTO Table(ID, colB, colC, colD)
SELECT CAST(ABS(CHECKSUM(NEWID()) % 10) AS VARCHAR(1)) 
       + CAST(ABS(CHECKSUM(NEWID()) % 10) AS VARCHAR(1)) 
       + cte.num as ID
       ,colB,colC,colD
FROM #tempTable
cross apply cte;

【讨论】:

谢谢你的回答对我很有帮助

以上是关于如何使用串联 ID 在 SQL Server 的循环中将表插入 N 次?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2005 中的复杂串联

SQL Server 2016 存储过程中的串联 OPENJSON

SQL Server 运行计划操作符具体解释——串联(Concatenation )

SQL Server 执行计划操作符详解——串联(Concatenation )

系统学习SQL1:误入SQL Server

sql server 2000中如何使用xml for path来进行字符串拼接