2012-11-13 53 views
1

我有幾個表,我正在做一些計算,以確定每種類型的記錄插入到另一個表中有多少。例如,主要實體是縣,會員,計劃。當我完成運行我的計算我最終是這樣的:在SQL Server中,您可以基於計算來插入多個記錄嗎?

  • 插入25縣A] + [方案1]記錄到表
  • 插入15縣A] + [方案2]記錄到表
  • 插入10 [縣A] + [計劃3]記錄到表
  • 插入15 [縣A] + [計劃4]記錄到表
  • 插入25縣A] + [計劃5]記錄到表
  • 將63 [縣B] + [計劃1]記錄插入表
  • 插入47縣B] + [方案3]記錄插入表
  • 插入19 [縣B] + [方案4]記錄插入表

插入片段看起來是這樣的:

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表數據的INSERT?

回答

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 
+0

我可能要建立自己的數字表,但我可以做,以2048的增量基礎上,master..spt_values表。而且該死的 - 比鼻涕還要冷靜!謝謝! –

相關問題