2016-10-17 4 views
0

Компания имеет таблицу SQL [Tatkal_Merge], содержащую несколько филиалов, имеющих множество учетных записей.SQL check and update table условно

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

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

[br_complete_qc] = 'Y', br_complete_Qc_date = GETDATE()

В настоящее время мы делаем то же самое, используя приведенный ниже код:

update Tatkal_Merge set [br_complete_qc]='Y',br_complete_Qc_date=GETDATE() where act_no in (
    select act_no 
    FROM [Tatkal].[dbo].[Tatkal_Merge] 
    where [br_complete_qc]='N' and 
    data_date+br_code not in (select distinct data_date+br_code FROM [Tatkal].[dbo].[Tatkal_Merge] where pin_scan='N') 
) 

Дата Данные NVARCHAR. например, 2016-10-16.

Учетная запись Nummber является первичным ключом.

В настоящее время код занимает время для выполнения.

Каков наилучший/правильный способ его достижения?

+0

Microsoft SQL Server 2016 –

+0

Почему на земле вы хранения 'date' в VARCHAR? –

+0

Таблица была создана кем-то еще с Date как varchar. Не хотите менять существующую систему. Но является ли это причиной замедления обновления? –

ответ

0

ИЗБЕЖАТЬ подзапрос, потому что подзапрос это замедляет Execution

declare @dateBrcode varchar (100) 
    select distinct @dateBrcode = data_date+br_code FROM 
    [Tatkal].[dbo].  [Tatkal_Merge] where pin_scan='N' 
    declare @actno varchar(100) 
    select @actno = act_no 
    FROM [Tatkal].[dbo].[Tatkal_Merge] 
    where [br_complete_qc]='N' and 
    data_date+br_code not in (@dateBrcode) 

update Tatkal_Merge set [br_complete_qc]='Y', 
br_complete_Qc_date=GETDATE() where act_no in (@actno) 
+0

Как только филиал будет завершен, все учетные записи в нем будут обновлены. Не думайте, что это сработает –