Anas.M.Ameen Ответов: 1

Как создать обновление для этого insert proc


Createproc [dbo].[Insert_Apartment]
@cat_id int,
@Build_na nvarchar(50) ,
@floor smallint , 
@number_rooms smallint ,
@price decimal,
@location nvarchar(50),
@images image,
@owner_name nvarchar(50),
@owner_phone nvarchar(15),
@note nvarchar(max),
@person_name nvarchar(59),
@person_number nvarchar(50),
@con_image image
as
DECLARE @NewID INT

INSERT INTO tbPerson(PersonName,PresonPhone,ContractPhoto) VALUES(@person_name, @person_number, @con_image)

SELECT @NewID = SCOPE_IDENTITY()

INSERT INTO tbApartments(BuildingName,Location,Price,NumberOfRooms,Floor
,OwnerName,OwnerPhone,Note,IdCat,PersonID,Photo) VALUES(@Build_na, @location,@price,@number_rooms,@floor,@owner_name
,@owner_phone,@note,@cat_id,@NewID,@images)


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

Я пытался, но моя проблема с scope_Identity, как это произойдет, когда нам нужно будет обновить его

Richard Deeming

Вы передаете идентификатор записи, которую хотите обновить. Scope_Identity это полезно только тогда, когда вы вставка записи.

RedDk

Я нашел эту статью Cp поучительной ...
https://www.codeproject.com/Articles/22824/A-Model-to-Represent-Directed-Acyclic-Graphs-DAG-o#Listing1

Как сказано выше, вставка, или, как в данном случае в статье, обновление должно быть дополнением к вашему коду.

1 Ответов

Рейтинг:
7

Wendelius

Если я правильно понимаю вашу ситуацию, я считаю, что вы пытаетесь сделать слишком много за одну процедуру. Я имею в виду, что эта единственная процедура, которая на основе имени должна вставлять только строку в таблицу tbApartments, также вставляет строку в таблицу tbPerson. Я считаю, что эти две операции должны быть разделены на отдельные процедуры.

Например, рассмотрим, что происходит, если у одного человека две квартиры. В таком случае вы вставите две разные строки для одного и того же человека, и две квартиры будут связаны с разными людьми.

Если вы разделите операции, это также означает, что вставка или обновление строки квартиры получит внешний ключ person в качестве параметра, и вам не нужно будет беспокоиться о scope_identity в этом случае. Иначе говоря

Сценарий 1: Добавить нового человека и новую квартиру
- процедура вставки вызова человека
- вставьте человека, получите ключевое значение из области идентификации
- вызовите процедуру вставки квартиры, передайте полученному человеку ключ
- вставьте квартиру в процедуру, получите значение ключа из области идентификации

Сценарий 2: Добавить новую квартиру к существующему человеку
- принесите существующий ключ персоны
- вызовите процедуру вставки квартиры, передайте человеку найденный ключ
- вставьте квартиру в процедуру, получите значение ключа из области идентификации

Сценарий 3: обновление существующей квартиры
- извлеките существующий квартирный ряд
- вызовите процедуру обновления квартиры, передайте все значения в процедуру
- обновление строки квартиры в процедуре на основе ключа квартиры

и так далее...