SQL проверить и обновить таблицу условно

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

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

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

[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 является первичным ключом.

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

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

sql,sql-server,tsql,

0

Ответов: 1


0

ИЗБЕГАЙТЕ подзапрос, потому что подзапрос замедляет ИСПОЛНЕНИЕ

  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)
sql, sql-server, tsql,
Похожие вопросы