2014-02-28 78 views
0

所有的列標題都相同,我想從這三個表格中創建一個單一表格。如何將三個表格合併到一個新表格中

如果完全可能的話,我還想創建一個觸發器,以便在編輯這三個源表中的一個時,將該更改複製到新組合表中。

我通常會這樣做的一個視圖,但由於STSrid的限制,我需要創建一個表,而不是一個視圖。

編輯*對,這有點荒謬,但無論如何。

我有三個表

有沒有重複在任何三個表

我想結合這三個表到一個表

有人可以幫客戶提供的樣品SQL代碼做到這一點

也有可能創造觸發器,因此當三個表格之一被編輯更改通過組合表

由於組合表需要將不同的STSrid添加到源表中,所以我無法創建視圖,創建視圖不會允許我這樣做,也不能實現一個索引視圖。

編輯*我有表A,表B和表C,所有列ORN,幾何和APP_NUMBER。所有的信息是不同的,所以

Table A (I'm not going to give an example geometry column) 
ORN ID 
123 14/0045/F 
124 12/0002/X 

Table B (I'm not going to give an example geometry column) 
ORN ID 
256 05/0005/D 
989 12/0012/X 

Table C (I'm not going to give an example geometry column) 
ORN ID 
043 13/0045/D 
222 11/0002/A 

我想所有的信息

Table D 
ORN ID  
123 14/0045/F 
124 12/0002/X 
256 05/0005/D 
989 12/0012/X 
043 13/0045/D 
222 11/0002/A 

任何幫助,將不勝感激的一個完整的表。

感謝

+0

你能表現出一定的樣本數據,所需的輸出和你有什麼到目前爲止已經試過?閱讀這裏瞭解更多關於['如何問一個關於Stackoverflow的問題](http://stackoverflow.com/questions/how-to-ask) –

+0

是否有重複的條目需要照顧? –

+0

你有創建表和觸發器的問題?你需要什麼幫助? – Rodion

回答

0

如果表的創建可以使用select intounion這樣相結合的一個時間件事:

select * into TableD from 
(
    select * from TableA 
    union all 
    select * from TableB 
    union all 
    select * from TableC 
) UnionedTables 

至於觸發,它應該很容易建立一個after insert觸發條件這個:

CREATE TRIGGER insert_trigger 
ON TableA 
AFTER INSERT AS 
insert TableD (columns...) select (columns...) from inserted 

顯然你將不得不改變columns...以符合你的結構。

雖然我沒有檢查語法,所以它可能不是完美的,它可能需要一些調整,但它應該給你一個想法,我希望。

+0

謝謝!非常有幫助 – SteveC81

0

如果ID不重複這病很容易實現它,在另一種情況下,你可以必須添加OriginatedFrom列。你也可以創建大量的關閉觸發器(不僅用於插入,而且用於刪除和更新),但是這是一個懶惰的藉口,不重構應用程序。

此外,您還必須注意數據的任何參考,因爲它的RELATIONAL模型很可能是其他表與您即將丟棄的表相關。

0

這是創建表d代碼

drop table D; 
Select * into D from (select * from A Union all select* from B Union all select * from C); 
+0

謝謝你,完美的作品! – SteveC81

0

其相當簡單的只創建Table_D首先

CREATE TABLE_D 
(
ORN  INT, 
ID  VARCHAR(20), 
Column3 Datatype 
) 
GO 

使用INSERT語句來記錄插入到該表中選擇並使用UNION從所有運營商其他三張桌子。

INSERT INTO TABLE_D (ORN , ID, Column3) 
SELECT ORN , ID, Column3 
FROM Table_A 
UNION ALL 
SELECT ORN , ID, Column3 
FROM Table_B 
UNION ALL 
SELECT ORN , ID, Column3 
FROM Table_C 

觸發

您將需要對所有的表創建該觸發器。

CREATE TRIGGER tr_Insert_Table_A 
ON TABLE_A 
FOR INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO TABLE_D (ORN , ID, Column3) 
    SELECT i.ORN , i.ID, i.Column3 
    FROM Inserted i LEFT JOIN TABLE_D D 
    ON i.ORN = D.ORN 
    WHERE D.ORN IS NULL 
END 

這裏閱讀以瞭解更多有關SQL Server Triggers

+0

謝謝你,這正是我正在尋找的。 – SteveC81

+0

@ SteveC81不是一個問題,但記住觸發器被稱爲「無聲的殺手」,他們只是有時做東西,當你甚至不希望他們這樣做,所以小心,好運朋友:) –

+0

這不涉及更新或刪除到底層表。 – MatBailie

相關問題