Кто-нибудь может написать этот запрос без курсора? - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно сделать этот запрос без курсора, но как?

Мой босс сказал не использовать курсоры, почему бы и нет? Как это можно написать без такового?

Я создал таблицу с именем tbl_StudentCoverage, в которой есть SSN varchar (9) и fklogin int.

Я также создал таблицу Mstr_tbl_login, в которой intID int является внешним ключом для fklogin в tbl_StudentCoverage и strFour varchar (4).

Я хочу обновить strFour в Mstr_tbl_login последними четырьмя SSN в tbl_StudentCoverage, сопоставляя intID с fklogin.

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

USE mstr_Database
GO

DECLARE @fkLogin int
DECLARE @ssn varchar(9)


DECLARE NW4 CURSOR FOR
SELECT fkLogin, SSN FROM mstr.tbl_StudentCoverage

OPEN NW4

FETCH NEXT FROM NW4
INTO @fkLogin, @ssn

WHILE (@@FETCH_STATUS = 0)
BEGIN
        IF (SELECT intID FROM mstr.mstr_tbl_Login WHERE intID = @fkLogin) = @fkLogin
    BEGIN
        UPDATE mstr.mstr_tbl_Login SET strFour = right(@ssn,4) WHERE intID = @fkLogin
    END
        FETCH NEXT FROM NW4
        INTO @fkLogin, @ssn
END

print 'done'
CLOSE NW4
DEALLOCATE NW4

GO

Нет ошибок, это работает отлично. Просто мой босс не хочет курсоров.

1 Ответ

3 голосов
/ 09 октября 2019

Вы продвинутый? Попробуйте это.

update
    A
set
    A.strFour = right(B.ssn,4)
from
    mstr.mstr_tbl_Login A
join
    mstr.tbl_StudentCoverage B
on
    B.fklogin = A.intId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...