[英]Copying data from staging table to multiple tables
在 SQL Server 2016 中,我有一個包含 8 列的臨時表 [S]。 我想將該數據復制到 3 個表 [A]、[B] 和 [C]。 [A] 有 FK 到 [B] 和 [B] 有 FK 到 [C]。 第 1-2 列轉到 [c],第 3 列轉到 [a],第 4-8 列轉到 [B]。
誰能告訴我如何做到這一點? 效率不是最重要的,因為只有 5.5Krows。
非常感謝任何幫助。
編輯:
應該說得更清楚:
如此有效地將 S 中的一行拆分為 3 個表? 為什么不使用表 S 中的主鍵而不是要使用的“鏈式”鍵?
您仍然可以按照您想要的方式連接數據,您還可以在不使用 B 的情況下連接表 A 和 C。
ps如果你沒有S中的PK,或者是你不想復制的形狀,你仍然可以在一個表中使用代理鍵,並從其他兩個表中引用它。
這是表 C 的解決方案,您可以針對其他表進行調整:
CREATE TABLE c (
ID int PRIMARY KEY
, col1 int
, col2 int
)
INSERT INTO c(id,col1,col2)
SELECT
ROW_NUMBER() OVER(ORDER BY s.PrimaryKey)
, s.col1
, s.col2
FROM s
或者
INSERT INTO c(id,col1,col2)
SELECT
s.PrimaryKey
, s.col1
, s.col2
FROM s
或(對我的口味來說太含蓄了)
SELECT
IDENTITY(int,1,1) AS ID
, col1
, col2
INTO c
FROM s
ORDER BY s.PrimaryKey
編輯:如果你想擺脫冗余,那么你可以像這樣使用 DENSE_RANK() (添加/刪除你需要的鍵的等級):
SELECT DISTINCT
DENSE_RANK() OVER(ORDER BY col1) AS PK_a
, s1.col1
INTO a
FROM s1
SELECT DISTINCT
DENSE_RANK() OVER(ORDER BY col2,col3) AS PK_b
, DENSE_RANK() OVER(ORDER BY col1) AS FK_a
, s1.col2
, s1.col3
INTO b
FROM s1
SELECT DISTINCT
DENSE_RANK() OVER(ORDER BY col4) AS PK_c
, DENSE_RANK() OVER(ORDER BY col1) AS FK_a
, DENSE_RANK() OVER(ORDER BY col2, col3) AS FK_b
, col4
INTO c
FROM s1
我最終使用了 Entity Framework 6 BulkInsert 工具。 我發現使用我已經定義的模型類更容易。 我只是將所有對象從暫存對象讀取到暫存對象列表中,然后再遍歷它們並構造 a、b 和 c,最后在一次調用中將它們全部保存。 5.5K 行,不到 10 秒。
感謝您的幫助@Bistabil
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.