Sql 如何合并表和防止ID冲突

Sql 如何合并表和防止ID冲突,sql,sql-server,sql-server-2014-express,Sql,Sql Server,Sql Server 2014 Express,我想将IndirectFlights表合并到PriceTable。 我没有在SourceTable(IndirectFlights)中输入ID,我还没有为它设置PK。 PriceTable的ID列是标识(1,1)列,也是主键 Qs1如何在源列中输入ID,以使它们不会与目标表(PriceTable)ID冲突?我曾考虑使用一个序列,但将来可能会发生冲突。 Qs2我可以选择合并哪些列,还是必须合并源表中的所有列 Target Table (PriceTable) Columns IDAirport_I

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

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
Edit:我刚刚运行了以下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列设置为notnull

有人能解释一下吗。
还有人可以解释我如何从这个Union All语句创建一个新的永久表。

您可以使用以下内容创建一个新表

     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;

您使用的是什么数据库-MS SQL Server?合并是一次性的,还是必须重复?如果您需要经常合并它们,请考虑使用uniqueidentifier作为主键,冲突风险几乎不存在。我使用的是Server express 2014。合并是一次性的,但我可能会根据是否在IndirectFlights表中输入新值再次合并表。IndirectFlights表的UniqueIdentififer键如何与PriceTable中的Identity列兼容您可以使用Identity(-1,-1)?这样你就可以避免将来的冲突。非常感谢你帮助乔恩。我忘了Select Into语句有多有用。