Как выбрать вставку в таблицу выбора, в которой уже есть значения в столбце первичного ключа, без добавления новых строк? - PullRequest
0 голосов
/ 23 октября 2018

Я работаю над базой данных для моего школьного проекта, в которой я должен создать функциональную базу данных, нормализуя предоставленные нам образцы таблиц.Одна таблица, с которой у меня проблемы, это маршруты.Я создаю 3 таблицы из нормализации, которые представляют собой «Пункты назначения», «Маршруты» и «Маршруты_Пунктов».

Код для пунктов назначения:

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)
);

Данные уже вставлены во все 3 таблицы, за исключением столбцов «Destination_Name» и «Itinerary_Name».Код, который я пытаюсь использовать, возвращается как ошибка.Код показан ниже.

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

Возвращаемая ошибка:

Сообщение 515, Уровень 16, Состояние 2, Строка 1 Невозможно вставить значение NULL в столбец 'DI', таблица 'DDDAssignment.dbo.Itinerary_Destination';столбец не допускает пустых значений.Вставить не удается.Оператор был прерван.

Существует ли метод для выполнения задачи вставки Destination_Name и Itinerary_Name без создания новых записей, требующих первичных ключей?

Или я должен сделать это вручную

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

используйте функцию coalesce, если в значение null будет вставлена ​​пустая строка, так как ваш столбец не допускает пустое значение, поэтому вы получили эту ошибку в своем запросе

insert into Itinerary_Destinations (Itinerary_name)
select  coalesce(Name,' ') from Itineraries where 
Itineraries.ItineraryID = ItineraryID;
0 голосов
/ 23 октября 2018

Если вы хотите изменить записи, которые уже существуют, вы должны использовать 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, тогда целесообразно использовать вставку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...