任何人都可以在没有光标的情况下写此查询吗?

时间:2019-10-08 23:06:40

标签: sql sql-server sql-update

我需要在没有光标的情况下进行此查询,但是如何?

我的老板说不要使用游标,为什么不呢?没有人怎么写?

我创建了一个名为tbl_StudentCoverage的表,该表具有SSN varchar(9)和fklogin int。

我还创建了一个表Mstr_tbl_login,该表的intID int是tbl_StudentCoverage和strFour varchar(4)中fklogin的外键。

我想用tbl_StudentCoverage中的intID与fklogin匹配的SSN的后四个更新Mstr_tbl_login中的strFour。

我在想我的老板不了解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 个答案:

答案 0 :(得分:3)

你进步了吗?试试这个。

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