Ich arbeite mit SQL Server 2012. Ich möchte überprüfen, ob ein Benutzer vorhanden ist, bevor ich ihn einer Datenbank hinzufüge.
Das habe ich getestet:
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
Dieser Code wird SELECT name FROM [sys].[server_principals]
jedoch nicht zurückgegeben, wenn dieser Benutzer in vorhanden ist MyDatabase
.
Wie kann ich überprüfen, ob ein Benutzer in existiert MyDatabase
?
sql-server
sql-server-2012
VansFannel
quelle
quelle
Antworten:
Verwenden Sie
sys.database_principals
anstelle vonsys.server_principals
.Die endgültige Abfrage würde also so aussehen (Berücksichtigung des Benutzerfilters):
quelle
Ich benutze SUSER_ID () und USER_ID () für diese Art von Dingen:
quelle
Weitere Verfeinerung, da dies zu einer optimalen Lesbarkeit führen würde.
quelle
Wenn Sie resistered-Server verwenden, können Sie mehrere Server gleichzeitig prüfen und ein true / false zurückgeben mit:
quelle
database_principals
anstattserver_principals
- überprüfen Sie die Frage - es geht um Benutzer auf Datenbankebene .