2016-01-29 4 views
0

У меня есть две таблицы в базе данных, как показано на скриншоте.Как обновить информацию в другой таблице?

enter image description here

Есть некоторые общие столбцы значения, присутствующие в tbCompanyAgent, как и в tbLicence как LicenseNumber, LicenseIssueDate и LicenseExpirationDate. После некоторых сложных запросов sql и бизнес-требований столбцы StateIssuedLicenseNumber, StateIssuedLicenseIssueDate и StatedIssuedLicenseExpirationDate и столбцы LicenceNumber, DateIssued и ExpirationDate в tbLicence объединены в один столбец LicenseNumber, LicenseIssueDate и LicenseExpirationDate в tbCompanyAgent.

Также значения в StateIssuedLicenseNumber, StateIssuedLicenseIssueDate и StatedIssuedLicenseExpirationDate одинаковы для той же группы записей, идентифицированных идентификатором Column LicenceType.

На самом деле существует одна резидентная запись для всех лицензий, которые хранятся в столбцах StateIssuedLicenseNumber, StateIssuedLicenseIssueDate и StatedIssuedLicenseExpirationDate и идентифицируются столбцом Resident с 1 значением.

Лицензии не резидентов хранятся в LicenceNumber, DateIssued и ExpirationDate с 0 значением.

Мой вопрос: если пользователь пытается внести некоторые изменения в tbLicence, которые должны быть отражены на tbCompanyAgent. Для этого я написал процедуру, подобную приведенным ниже строкам кода.

ALTER proc [dbo].[prCompanyAgentUpdate] 
(
@NewLicenceNumber nvarchar(50), 
@NewDateIssued datetime, 
@NewExpirationDate datetime, 
@LicenceNumber nvarchar(50), 
@DateIssued datetime, 
@ExpirationDate datetime, 
@StateIssuedLicenceNumber nvarchar(50), 
@StateIssuedDateIssued datetime, 
@StateIssuedExpirationDate datetime 
) 
as 

Declare @CDateIssued datetime; 
Declare @CExpirationDate datetime; 
Declare @CStateIssuedDateIssued datetime; 
Declare @CStateIssuedExpirationDate datetime; 

Set @CDateIssued= CONVERT(char(10),@DateIssued, 126); 
Set @CExpirationDate= CONVERT(char(10), @CExpirationDate, 126); 
Set @CStateIssuedDateIssued= CONVERT(char(10), @StateIssuedDateIssued, 126); 
Set @CStateIssuedExpirationDate= CONVERT(char(10), @StateIssuedExpirationDate, 126); 

    UPDATE [tbCompanyAgent] 
    SET 
    LicenceNumber = @NewLicenceNumber, 
    LicenceIssueDate = @NewDateIssued, 
    LicenceExpirationDate [email protected] 
    WHERE 
    LicenceNumber in (select distinct LicenceNumber 
    from tbLicence where LicenceNumber= @LicenceNumber AND   StateIssuedLicenseNumber= @StateIssuedLicenceNumber 
    AND LicenceIssueDate = @CDateIssued AND StateIssuedLicenseIssuedDate = @CStateIssuedDateIssued AND 
StateIssuedLicenseExpirationDate = @CStateIssuedExpirationDate) 

Это не обновление информации в tbCompanyAgent. Пожалуйста, помогите мне !!!

+0

Создайте еще одну таблицу и пусть обе таблицы ссылаются на эти общие столбцы оттуда на основе идентификатора. ** ЕСЛИ ** нормализация не является проблемой, а ваши данные составляют менее 10 миллионов строк или что-то еще. –

+0

Я не могу этого сделать, потому что мне потребуется возраст, чтобы сделать это из-за сложного характера требований бизнеса ... – Nida

ответ

0

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

SELECT L.LicenceNumber, L.LicenceIssueDate, L.LicenceExpirationDate 
FROM [tbCompanyAgent] CA 
INNER JOIN tbLicence L on CA.LicenceNumber = L.LicenceNumber 
WHERE L.LicenceNumber = @LicenceNumber 
AND L.StateIssuedLicenseNumber = @StateIssuedLicenceNumber 
AND L.LicenceIssueDate = @CDateIssued 
AND L.StateIssuedLicenseIssuedDate = @CStateIssuedDateIssued 
AND L.StateIssuedLicenseExpirationDate = @CStateIssuedExpirationDate 

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

UPDATE CA 
SET CA.LicenceNumber = L.LicenceNumber, CA.LicenceIssueDate = L.LicenceIssueDate, 
CA.LicenceExpirationDate = L.LicenceExpirationDate 
FROM [tbCompanyAgent] CA 
INNER JOIN tbLicence L on CA.LicenceNumber = L.LicenceNumber 
WHERE L.LicenceNumber = @LicenceNumber 
AND L.StateIssuedLicenseNumber = @StateIssuedLicenceNumber 
AND L.LicenceIssueDate = @CDateIssued 
AND L.StateIssuedLicenseIssuedDate = @CStateIssuedDateIssued 
AND L.StateIssuedLicenseExpirationDate = @CStateIssuedExpirationDate 
+0

Вы хотите сказать, что мы должны написать оба вышеуказанных запроса в одной процедуре ... – Nida

+0

Нет первого для просто чтобы вы могли убедиться, что все, что вы пытаетесь достичь, вы получаете. После того, как вы просто используете запрос на обновление в своей процедуре. – Mukund

+0

@ Нида работала? – Mukund

0

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

Смежные вопросы