Boa Tarde
Estou implementando o resource governor em meu ambiente de produção, gostaria de saber se alguém sabe como faço para verificar na função de classificação
a role que cada usuario está vinculado, sem que eu tenha que fazer uma comparação por usuario, eu implementei uma função, só que não é permitido o comando execute em função, alguma luz??
tenho o script abaixo
CREATE FUNCTION fn_resource_governor()
RETURNS sysname
WITH SCHEMABINDING
AS
begin
DECLARE @Banco sysname = (SELECT DB_NAME())
DECLARE @User sysname = (SELECT SUSER_NAME());
DECLARE @SQL NVARCHAR(max);
DECLARE @Role sysname;
DECLARE @RoleUser TABLE (NameRole sysname);
SET @SQL = N'
INSERT INTO @RoleUser (NameRole)
SELECT ISNULL(USER_NAME(mem.role_principal_id), '''')
FROM '+@Banco+'.sys.database_principals prin
LEFT OUTER JOIN '+@Banco+'.sys.database_role_members mem ON prin.principal_id = mem.member_principal_id
AND ISNULL(USER_NAME(mem.role_principal_id), '''') LIKE ''ROLE%'''
EXEC sp_executesql @SQL, N'@User_0 sysname', @User_0 = @User
IF @@ROWCOUNT = 0
BEGIN
DELETE @RoleUser;
SET @SQL = N'INSERT INTO @RoleUser (NameRole)
SELECT CASE WHEN SSPs2.name IS NULL THEN ''Public''
ELSE SSPs2.name
END
FROM '+@Banco+'.sys.server_principals SSPs
LEFT JOIN '+@Banco+'.sys.server_role_members SSRM ON SSPs.principal_id = SSRM.member_principal_id
LEFT JOIN '+@Banco+'.sys.server_principals SSPs2 ON SSRM.role_principal_id = SSPs2.principal_id
WHERE SSPs.name = @User_0
AND SSPs.is_disabled = 0'
EXEC sp_executesql @SQL, N'@User_0 sysname', @User_0 = @User
END
SELECT @Role=NameRole FROM @RoleUser
RETURN @Role
Uma função de classificação para a implementação de Resource Governor, porém não é permitido usar exec nas function o que eu posso fazer, mensagem que dá
Mensagem 4516, Nível 16, Estado 1, Procedimento fn_resource_governor, Linha 43
Não é possível associar a função 'fn_resource_governor' a esquema porque ela contém uma instrução EXECUTE.
Att.,
Leonardo