Recuerda que en las ciencias informáticas un problema suele tener diferentes resoluciones, no obstante te mostramos lo mejor y más óptimo.
Solución:
Usar sys.database_principals
en vez de sys.server_principals
.
Entonces, la consulta final se vería así (teniendo en cuenta el filtro de usuario):
USE [MyDatabase]
GO
IF NOT EXISTS (SELECT [name]
FROM [sys].[database_principals]
WHERE [type] = N'S' AND [name] = N'IIS APPPOOLMyWebApi AppPool')
Begin
CREATE USER [IIS APPPOOLMyWebApi AppPool]
FOR LOGIN [IIS APPPOOLMyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOLMyWebApi AppPool]
GO
Uso SUSER_ID() y USER_ID() para este tipo de cosas:
-- Check SQL Server Login
IF SUSER_ID('SomeLogin') IS NULL
CREATE LOGIN SomeLogin WITH PASSWORD = 'SomePassword';
-- Check database user
IF USER_ID('SomeUser') IS NULL
CREATE USER SomeUser FOR LOGIN SomeLogin;
Un mayor refinamiento ya que esto haría una lectura más óptima
USE [MyDatabase]
GO
IF DATABASE_PRINCIPAL_ID('IIS APPPOOLMyWebApi AppPool') IS NULL
BEGIN
CREATE USER [IIS APPPOOLMyWebApi AppPool]
FOR LOGIN [IIS APPPOOLMyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
END
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOLMyWebApi AppPool]
GO
Comentarios y valoraciones del artículo
Te invitamos a sostener nuestro cometido poniendo un comentario o dejando una valoración te damos la bienvenida.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)