Estou trabalhando com o SQL Server 2012. Quero verificar se existe um usuário antes de adicioná-lo a um banco de dados.
Isto é o que eu testei:
USE [MyDatabase]
GO
IF NOT EXISTS (SELECT name
FROM [sys].[server_principals]
WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
CREATE USER [IIS APPPOOL\MyWebApi AppPool]
FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Mas, esse código SELECT name FROM [sys].[server_principals]
não retornará se esse usuário existir MyDatabase
.
Como posso verificar se existe um usuário MyDatabase
?
sql-server
sql-server-2012
VansFannel
fonte
fonte
Respostas:
Use em
sys.database_principals
vez desys.server_principals
.Portanto, a consulta final ficaria assim (contabilizando o filtro do usuário):
fonte
Eu uso SUSER_ID () e USER_ID () para esse tipo de coisa:
fonte
Um refinamento adicional, pois isso tornaria uma leitura mais ideal
fonte
Se você estiver usando servidores resistentes, poderá verificar vários servidores ao mesmo tempo e retornar um verdadeiro / falso com:
fonte
database_principals
vez deserver_principals
- verifique a pergunta - é sobre usuários no nível do banco de dados .