繁体   English   中英

如何选择插入到选择一个表中,而该表在主键列中已经有值而不添加新行?

[英]How do I select insert into select a table which already has values in the primary key column without adding new rows?

我正在为我的学校项目创建数据库,在该数据库中,我必须通过标准化提供给我们的示例表来生成功能数据库。 我遇到麻烦的一张桌子是行程。 我根据规范化生成了3个表,分别是“目的地”,“行程”和“ Itinerary_Destinations”。

目的地的代码是:

create table Destinations
(
 DestinationID varchar(5) primary key,
 Name varchar(45)
 );

行程的代码是:

create table Itineraries
(
 ItineraryID varchar(5),
 Name varchar(45)
 );

最后一张表的代码是:

create table Itinerary_Destinations
(
DI varchar(5) primary key,
ItineraryID varchar(5) foreign key references Itineraries(ItineraryID),
Itinerary_Name varchar(45),
DestinationID varchar(5) foreign key references Destinations(DestinationID),
Destination_Name varchar(45)
);

除“ Destination_Name”和“ Itinerary_Name”列外,数据已插入所有3个表中。 我尝试使用的代码返回为错误。 代码如下所示。

insert into Itinerary_Destinations (Itinerary_name)
select Name from Itineraries where 
Itineraries.ItineraryID = ItineraryID;

它返回的错误是

消息515,级别16,状态2,第1行无法将值NULL插入表“ DDDAssignment.dbo.Itinerary_Destinations”的“ DI”列中; 列不允许为空。 INSERT失败。 该语句已终止。

有没有一种方法可以完成插入Destination_Name和Itinerary_Name的任务,而无需创建需要主键的新记录?

还是应该手动执行?

如果要修改已经存在的记录,则应使用UPDATE而不是INSERT

UPDATE a
SET Itinerary_name = b.Name
FROM Itinerary_Destinations a
INNER JOIN Itinerary_name b
    ON a.ItineraryID = b.ItineraryID;

但是,如果确实有一些数据尚未与Itinerary_Destinations表进行逻辑关联,则使用插入是合适的。

在null的情况下使用coalesce功能将插入空白字符串,因为您的列不允许使用null值,这就是为什么在查询中出现该错误的原因

insert into Itinerary_Destinations (Itinerary_name)
select  coalesce(Name,' ') from Itineraries where 
Itineraries.ItineraryID = ItineraryID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM