2015-02-24 53 views
0

我想將IndirectFlights表合併到PriceTable中。 我沒有在SourceTable(IndirectFlights)中輸入ID,我還沒有爲它設置PK。 PriceTable的ID列是Identity(1,1)列,也是主鍵。如何合併表並防止ID衝突

Qs1如何在源列中輸入ID以便它們不與目標表(PriceTable)ID衝突?我正在考慮使用序列,但未來可能會發生衝突。 Qs2我可以選擇合併哪些列,還是必須合併源表中的所有列?

Target Table (PriceTable) Columns 
IDAirport_ICAO_Code,Airline_ICAO_Code,Departure,Price,RouteStatus,DateRowModified 

Source Table (IndirectFlights) Columns 
IDAirport_ICAO_Code,Destination,Airline,Airline_ICAO_Code,RouteStatus,Connecting Airport 

編輯:我剛纔運行下面的聯盟,以替代使用合併所有聲明。

Select ID,Airport_ICAO_Code,Airline_ICAO_Code,RouteStatus 
From RoughworkPriceTable 
Union All 
Select ID,Airport_ICAO_Code,Airline_ICAO_Code,RouteStatus 
From RoughworkIndirectFlights; 

代碼的工作,但我注意到,ID列從IndirectFlights.ID接受空值eventhough我必須設置爲NOT NULL的ID列。

任何人都可以解釋這一點。 也可以expalin如何從這個Union All聲明中創建一個新的永久表。

+0

您正在使用什麼數據庫的新表 - MS SQL Server的?合併是一次性的,還是一定要重複? – 2015-02-24 15:34:16

+1

如果您需要頻繁合併它們,請將唯一標識符作爲主鍵,碰撞風險幾乎不存在。 – Fredou 2015-02-24 15:34:36

+0

即時通訊使用Server Express 2014.合併是一次性的,但我可能會再次合併表,具體取決於是否將新值輸入到IndirectFlights表中。 – frustrationmultiplied 2015-02-24 15:38:55

回答

0

您可以創建類似

 Select * into newTmpTable from (
     Select ID,Airport_ICAO_Code,Airline_ICAO_Code,RouteStatus From RoughworkPriceTable 
    Union All 
    Select ID,Airport_ICAO_Code,Airline_ICAO_Code,RouteStatus From RoughworkIndirectFlights) 
as mergedData; 
+0

非常感謝幫助喬恩。我確實忘記了Select Into語句的用處。 – frustrationmultiplied 2015-02-24 22:31:30