2015-02-24 55 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