Lam*_*lan 0 sql-server t-sql update sql-server-2014
如果我有一个包含 2 列的简单表和一个由两列组成的复合主键,我该如何重命名其中一列,但前提是它不会导致主冲突?
这是一个简化的示例。
拿下表:
User | Role
------|----------------
Joe | User
Joe | Administrator
Brian | User
Anna | Administrator
Anna | Admin
Run Code Online (Sandbox Code Playgroud)
假设我想编写以下查询:
UPDATE UserRoles Set Role = 'Admin' WHERE Role = 'Administrator'
Run Code Online (Sandbox Code Playgroud)
在不使用游标的情况下,如何更改 SQL 更新语句以避免重命名 Anna(因为该用户已经具有 Admin 角色),但仍重命名 Joe?
甚至可以使用基于集合的 SQL 还是使用游标是唯一的方法?
谢谢。
一种方法是
UPDATE a
SET [Role]= 'Admin'
FROM UserRoles a
WHERE a.[Role]= 'Administrator'
AND NOT EXISTS
(
SELECT NULL
FROM dbo.UserRoles b
WHERE b.[User] = a.[User] AND b.[Role] = 'Admin'
);
Run Code Online (Sandbox Code Playgroud)