【问题标题】:In SQL Server, can you INSERT multiple records based off of calculations?在 SQL Server 中,您可以根据计算插入多条记录吗?
【发布时间】:2012-11-13 18:00:47
【问题描述】:

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

  • 在表中插入 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

我正在寻找一种在存储过程中构建这些 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 表数据形成插入?

【问题讨论】:

    标签: sql-server-2008 bulkinsert


    【解决方案1】:

    如果您有 perCountyPlan

    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
    

    【讨论】:

    • 我可能需要构建自己的数字表,但我可以根据 master..spt_values 表以 2048 为增量进行构建。该死的——比鼻涕还滑!谢谢!
    猜你喜欢
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多