如何合并表并防止ID冲突

时间:2015-02-24 15:26:00

标签: sql sql-server sql-server-2014-express

我想将IndirectFlights表合并到PriceTable。 我没有在SourceTable(IndirectFlights)中输入ID,但我还没有为它设置PK。 PriceTable的ID列是Identity(1,1)列,也是主键。

Qs1如何在“源”列中输入ID,以便它们不与目标表(PriceTable)ID冲突?我正在考虑使用一个序列,但它可能会在将来发生冲突。 Qs2我可以选择要合并的列,还是必须合并Source表中的所有列?

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

编辑:我刚刚运行了以下Union All语句作为使用Merge的替代方法。

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中的Null值,尽管我将ID列设置为Not Null。

任何人都可以解释这个。 也有人可以通过这个Union All声明来表达我如何创建一个新的永久表。

1 个答案:

答案 0 :(得分: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;