Pracuję z SQL Server 2012. Chcę dodać użytkownika do bazy danych przed dodaniem go do bazy danych.
Oto co przetestowałem:
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
Ale ten kod SELECT name FROM [sys].[server_principals]
nie zwraca się, jeśli ten użytkownik istnieje MyDatabase
.
Jak mogę sprawdzić, czy użytkownik istnieje MyDatabase
?
sql-server
sql-server-2012
VansFannel
źródło
źródło
Odpowiedzi:
Użyj
sys.database_principals
zamiastsys.server_principals
.Tak więc końcowe zapytanie wyglądałoby tak (uwzględniając filtr użytkownika):
źródło
Używam SUSER_ID () i USER_ID () do tego rodzaju rzeczy:
źródło
Dalsze udoskonalenie, ponieważ pozwoliłoby to na bardziej optymalny odczyt
źródło
Jeśli używasz zarejestrowanych serwerów, możesz sprawdzić wiele serwerów jednocześnie i zwrócić wartość true / false za pomocą:
źródło
database_principals
zamiastserver_principals
- sprawdź pytanie - dotyczy użytkowników na poziomie bazy danych .