Я работаю с SQL Server 2012. Я хочу проверить, существует ли пользователь, прежде чем добавить его в базу данных.
Вот что я проверил:
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
Но этот код SELECT name FROM [sys].[server_principals]
не возвращается, если этот пользователь существует в MyDatabase
.
Как я могу проверить, существует ли пользователь в MyDatabase
?
sql-server
sql-server-2012
VansFannel
источник
источник
Ответы:
Используйте
sys.database_principals
вместоsys.server_principals
.Таким образом, окончательный запрос будет выглядеть так (с учетом пользовательского фильтра):
источник
Я использую SUSER_ID () и USER_ID () для такого рода вещей:
источник
Дальнейшее уточнение, так как это сделало бы более оптимальным
источник
Если вы используете зарегистрированные серверы, вы можете проверить сразу несколько серверов и вернуть true / false с помощью:
источник
database_principals
а неserver_principals
- проверить вопрос - это касается пользователей на уровне базы данных .