Sql-Server
如果不存在則更新語句
如果我有一個包含兩列的簡單表和一個由兩列組成的複合主鍵,我該如何重命名其中一列,但前提是它不會導致主衝突?
這是一個簡化的例子。
取下表:
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' );