Sql 正在寻找游标的替代方法

Sql 正在寻找游标的替代方法,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图找出一种更好、更有效的方法来编写下面的脚本。有人能想出一种不用光标就能实现相同目标的方法吗 “用户”在表1中可能出现多次,但在表2中只能存在一次 表1 |Name |Access | ------------------- User1 |N | User1 |N | User1 |Y | |Name |Access | ------------------- User1 | | User2 |

我试图找出一种更好、更有效的方法来编写下面的脚本。有人能想出一种不用光标就能实现相同目标的方法吗

“用户”在表1中可能出现多次,但在表2中只能存在一次

表1

|Name   |Access   |
-------------------
User1   |N        |
User1   |N        |
User1   |Y        |
|Name   |Access   |
-------------------
User1   |         |
User2   |         |
User3   |         |
表2

|Name   |Access   |
-------------------
User1   |N        |
User1   |N        |
User1   |Y        |
|Name   |Access   |
-------------------
User1   |         |
User2   |         |
User3   |         |
代码:


我的理解是,仅当来自表1的最新(由max obj列定义)访问为“Y”时,才需要更新表2的访问列

试试这个:

UPDATE @Table2
SET Access = CA.Access
FROM @Table2 AS T2
CROSS APPLY (
                SELECT TOP 1 Access 
                FROM @Table1 AS T1
                WHERE       T1.Name = T2.Name
                        AND T1.Access = 'Y'
                ORDER BY Obj DESC
            ) CA

表1是否真的列出了用户1 3次?如果是这样,user1最终应该拥有什么访问权限?对于像这样的问题,前面已经有了答案。。。例如:无需重新发明车轮。