Sql-Server

如果不存在則更新語句

  • February 20, 2019

如果我有一個包含兩列的簡單表和一個由兩列組成的複合主鍵,我該如何重命名其中一列,但前提是它不會導致主衝突?

這是一個簡化的例子。

取下表:

User  | Role
------|----------------
Joe   | User
Joe   | Administrator
Brian | User
Anna  | Administrator
Anna  | Admin

假設我想編寫以下查詢:

UPDATE UserRoles Set Role = 'Admin' WHERE Role = 'Administrator'

在不使用游標的情況下,如何更改我的 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'
 );

引用自:https://dba.stackexchange.com/questions/123420