js solution Ответов: 3

Вставка значений инкремента в столбец SQL


Привет, Ребята. Я новичок в SQL. У меня есть 2 столовых автомобиля и карты.
Table: Vehicle
ID_Vehicles(Pk)
137
138
139
140
Table: Cards	 
ID_Cards(Pk)	VehiclesID(Fk)
338	          137
339	          138
340	          NULL
341	          NULL
Я хотел обновить ID_vehicles(первичный ключ) в таблице транспортных средств до VehiclesID(внешний ключ) в таблице карт.

Такое что

В карточном столе.
ID_cards 340 будет ссылаться на VehiclesID 139

341 будет ссылаться на VehiclesID 140

342 будет ссылаться на VehiclesID 141 ...
и ссылка продолжается до тех пор, пока все ID_cards не будут связаны с vehiclesID.

Должен ли я использовать функцию insert для вставки значений инкремента в столбец vehiclesID в таблице карт?

Любая добрая душа, готовая помочь новичку в SQL здесь, пожалуйста, посоветуйте.
Если это неправильный форум, чтобы спросить. Пожалуйста, посоветуйте, на какой сайт я могу отправить сообщение?[Введите описание изображения здесь][1]

Что я уже пробовал:

Мои коды как показано ниже:
DECLARE @IncrementValue int SET @IncrementValue = 139 UPDATE CARDS SET VehiclesID = @IncrementValue,@IncrementValue=@IncrementValue+1 where ID_CARDS between 340 and 537

However error message prompted below: The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_CARDS_VEHICLESID" The conflict occurred in database "HECPOLL", table "dbo.VEHICLES", column 'ID_VEHICLES'

Ziee-M

Вам просто нужно установить поле id в качестве автоинкремента в вашей таблице, база данных автоматически увеличит значения при вставке новой строки.
Поскольку это автоинкремент, вам не нужно передавать идентификатор.
вот ссылка w3 : https://www.w3schools.com/sql/sql_autoincrement.asp

3 Ответов

Рейтинг:
2

mudgilsks

Привет, в SQL foreign key допускаются только значения в столбце primary key справочной таблицы. В этом случае сначала вам нужно найти значение в первичной таблице, а затем обновить его во вторичной таблице. Для этого вы можете использовать выходное значение inserted.column во временную таблицу, а затем использовать его во вторичной таблице в качестве значения внешнего ключа. Для получения дополнительной информации, пожалуйста, проверьте ссылку ниже, в которой вы можете получить значение вставленного первичного ключа и использовать его во вторичной таблице.
Предложение OUTPUT для операторов INSERT и DELETE - SQLServerCentral[^]


Richard Deeming

Вы опубликовали одно и то же решение дважды.

Если вы хотите обновить свое решение, Нажмите зеленую ссылку "улучшить решение" и отредактируйте свое решение. НЕ опубликуйте обновление как новое решение.

mudgilsks

спасибо, дубликат решения был удален.

Рейтинг:
1

Skipton Corp

Привет

Решение от новичка:

ALTER TABLE Cards
ADD FOREIGN KEY (ID_Vehicles) REFERENCES Vehicle (ID_Vehicles)


1. Изменение таблицы.
2. Добавьте новый столбец (внешний ключ), который может создать ссылку.
3. соотнесите внешний ключ со столбцом первичного ключа в таблице транспортных средств.


Рейтинг:
1

Santosh kumar Pithani

--if want to update parent table row will reflect same in child than better to use "ON UPDATE CASCADE " with foreign key reference level..

CREATE TABLE Vehicle(ID_Vehicles int primary key)
insert into Vehicle values(137),(138),(139),(140);

CREATE TABLE Cards(ID_Cards  int primary key,VehiclesID  int foreign key(VehiclesID) references Vehicle(ID_Vehicles) ON UPDATE CASCADE)

INSERT INTO Cards values
(338,137 )
,(339,138 )
,(340,NULL)
,(341,NULL)

select VehiclesID from Cards where ID_Cards=339; --before updating parent table

update Vehicle set ID_Vehicles=136 where ID_Vehicles=338;

select VehiclesID from Cards where ID_Cards=339; --after updating parent table