【问题标题】:How can INSERT INTO a table N times within a loop in SQL Server using a concatenated ID?如何使用串联 ID 在 SQL Server 的循环中将表插入 N 次?
【发布时间】: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 可以做到这一点吗?

【问题讨论】:

    标签: sql sql-server query-optimization recursive-query


    【解决方案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;
    

    【讨论】:

    • 谢谢你的回答对我很有帮助
    猜你喜欢
    • 2014-03-22
    • 2020-02-08
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2012-03-24
    • 2019-02-06
    相关资源
    最近更新 更多