1

我有几个表,我正在对它们进行一些计算以确定每种类型的记录中有多少要插入到另一个表中。例如,主要实体是县、成员、计划。当我完成计算时,我最终得到如下结果:

  • 将 25 个 [County A] + [Plan 1] 记录插入表中
  • 将 15 个 [County A] + [Plan 2] 记录插入表中
  • 将 10 条 [County A] + [Plan 3] 记录插入表中
  • 将 15 个 [County A] + [Plan 4] 记录插入表中
  • 将 25 个 [County A] + [Plan 5] 记录插入表中
  • 将 63 条 [County B] + [Plan 1] 记录插入表中
  • 将 47 [County B] + [Plan 3] 记录插入表中
  • 将 19 个 [County B] + [Plan 4] 记录插入表中

INSERTS 看起来像:

INSERT INTO Assign (ID, CountyID, PlanID)
VALUES (NEWID(), 'A', 1), (NEWID(), 'A', 1), ..., (NEWID(), 'A', 1) -- 25 times
INSERT INTO Assign (ID, CountyID, PlanID)
VALUES (NEWID(), 'A', 2), (NEWID(), 'A', 2), ..., (NEWID(), 'A', 2) -- 15 times

ETC

我正在寻找一种从存储过程中构建这些 INSERT 语句的方法:

  • 不要使用游标和/或 while 循环
  • 不做单独的插入,想要批量插入的方法
  • 使用 CTE?(不需要,但谁知道)

所有这些信息都存储在一个临时表中,定义为:

CREATE TABLE #holding (countyID CHAR(2), planID INT, perCountyPlan INT)

SELECT * FROM #holding ORDER BY countyID, planID
A  1  25
A  2  15
A  3  10
A  4  15
A  5  25
B  1  63
B  3  47
B  4  19
C .......
etc

任何想法如何根据#history 表数据形成插入?

4

1 回答 1

1

如果你有 perCountyPlan<= 2048,请试试这个。否则,您需要建立自己的号码表

WITH num AS (
    SELECT number
    FROM master..spt_values WHERE type = 'P' 
)
INSERT INTO Assign (ID, CountyID, PlanID)
SELECT  NEWID(),h.countyID, h.planID
FROM    #holding h
INNER JOIN num n 
    ON n.number < h.perCountyPlan
于 2012-11-13T19:54:48.087 回答