Как избавиться от Cursor и использовать UPDATE с SELECT - PullRequest
0 голосов
/ 26 сентября 2019

Я считаю, что курсор, используемый в этом коде, является причиной некоторых серьезных проблем с производительностью, однако я новичок в TSQL.

Следующий скрипт выполняется на SQL SERVER 2008. Я пытаюсь повторить его, поэтому вместо этого я использую операторы JOIN, однако я не смог сделать это успешно.

DECLARE AIRAMSDET CURSOR FOR
SELECT BILL, RECIEPT, NAME
FROM Client_Table
WHERE IsProcessed = 1 
AND TYPE IN ('Sub','First_Time','Old') AND LEN(BILL) > 1

OPEN AIRAMSDET
FETCH AIRAMSDET into @VARBILL, @VARRECIEPT, @VARNAME
WHILE @@Fetch_Status = 0
BEGIN
    UPDATE archieve
    SET entry = left(@VARBILL + '- '+ @VARNAME)
    WHERE archiveID = @VARBILL
END

1 Ответ

0 голосов
/ 26 сентября 2019

Это должно быть что-то вроде следующего:

UPDATE ARCHIEVE
    SET ENTRY = CT.BILL + '-' + CT.NAME
FROM CLIENT_TABLE CT
WHERE 
        ARCHIEVE.ARCHIVEID = CT.BILL
    AND CT.ISPROCESSED = 1 
    AND CT.TYPE IN ('Sub','First_Time','Old') AND LEN(BILL) > 1

Я не включил LEFT (), так как его использование в вашем запросе было не очень понятным.Left принимает integer_expression в качестве второго параметра, когда вы передаете @@ VARNAME, который, скорее всего, является VARCHAR.Пожалуйста, добавьте это по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...