在 SQL Server 中,您可以根据计算插入多条记录吗?

Posted

技术标签:

【中文标题】在 SQL Server 中,您可以根据计算插入多条记录吗?【英文标题】:In SQL Server, can you INSERT multiple records based off of calculations? 【发布时间】: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 表数据形成插入?

【问题讨论】:

【参考方案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 为增量进行构建。该死的——比鼻涕还滑!谢谢!

以上是关于在 SQL Server 中,您可以根据计算插入多条记录吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server - 如何根据将插入数据半小时的表中的几个参数来计算持续时间?

在sql server中一次插入固定数量的行2000

如何查找在 SQL Server 表中插入或更新行的时间

在 SQL Server CE 和 C# 中获取新插入行的主键?

在多线程环境中的 SQL Server 中插入后获取 ID?

请教,SQL SERVER 2000使用insert插入一条记录,最快耗时多少