如何使用串联 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 2016 存储过程中的串联 OPENJSON
SQL Server 运行计划操作符具体解释——串联(Concatenation )