terça-feira, 18 de outubro de 2016

SQL Server - como revalidar / corrigir os logins x users após restaurar um backup

Após a restauração de um backup, os usuários ficam impossibilitados de fazer login, pois o SQL perde a referência Login x Usuário do banco.
Para corrigir isso, execute o script a baixo, que irá gerar um script de autofix para corrigir essa referência.
É só executá-lo e pronto!


- Copiar o resultado da query abaixo e executar no seu banco
-- Repetir o procedimento para cada Banco de dados restaurado

create table #tmp_logins(UserName varchar(150),userSID varchar(max))
insert into #tmp_logins
EXEC sp_change_users_login 'Report' 

select 'EXEC sp_change_users_login ''Auto_Fix'',''' + username + ''';' from #tmp_logins

select * from #tmp_logins
drop table #tmp_logins

segunda-feira, 3 de outubro de 2016

MySQL - como forçar uma exceção em uma procedure

Forçar uma exceção no MySQL não é uma tarefa simples como no SQL Server, onde você apenas chama a função RAISERROR.

1) Criar uma procedure MY_EXCEPTION que irá receber a mensagem de erro para forçar a exceção

DROP PROCEDURE IF EXISTS MY_EXCEPTION;

DELIMITER $$
-- Procedure para ser chamada com objetivo de causar exceção
CREATE PROCEDURE MY_EXCEPTION (error_text varchar(2000))
BEGIN
    SET @sql = error_text;
    PREPARE MY_SIGNAL_STMT FROM @sql;
    EXECUTE MY_SIGNAL_STMT;
    DEALLOCATE PREPARE MY_SIGNAL_STMT;
END
$$

2) Chamando a procedure

Dentro da sua procedure, faça a checagem que precisa fazer e dentro do seu IF chame a procedure

if (v_valor = 0) then
--  ROLLBACK;  -- utilize primeiro o Rollback, caso você esteja com um BEGIN TRAN aberto

-- Aqui você chama a procedure criada, passando a mensagem que deseja exibir
 CALL MY_EXCEPTION ('O valor não pode ser zero');

end if;


3) Tratamento para erros não previstos
Caso você esteja com um BEGIN TRAN aberto, é importante também incluir um tratamento para as exceções não tratadas. Para isso, utilize o comando abaixo, que fará um rollback em case de erro.

    BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;           
   
    END;