nas instruções ‘online’ para o programa que cria a base de dados de amostras de TSQLTutorJoins a partir das minhas colunas anteriores, recomendo que use o osql.exe para executar o programa a partir da linha de comandos. Para demonstrar o porquê, estou a basear a coluna deste mês no RAISERROR e num Truque fixe que aprendi sobre usar o parâmetro de estado da declaração RAISERROR. Usando um valor especial para o parâmetro de Estado RAISERROR, você pode forçar o término de um script complexo e evitar a sua execução no banco de dados errado.,
RAISERROR tem três componentes primários: o texto do erro, a gravidade e o estado. O texto de erro pode ser uma mensagem codificada ou parametrizada ou um número de erro de uma mensagem definida pelo Usuário permanente. Para criar suas próprias mensagens permanentes, consulte o SQL Server Books Online (BOL) sobre como usar o procedimento sp_addmessage do sistema armazenado.a gravidade tem vários níveis definidos. Erros definidos pelo desenvolvedor variam em gravidade de 1 a 16, com 16 Sendo o mais comum e o padrão. No entanto, nem todas as severidades funcionam da mesma forma., A tabela 1 mostra as categorias de gravidade, como elas exibem mensagens no Analisador de consultas, e como elas estão conectadas opcionalmente no registro de aplicações do Visualizador de eventos. Para registar as mensagens no Visualizador de Eventos, você pode usar com o LOG na sua declaração RAISERROR ou criar a mensagem permanente usando sp_ addmessage com o parâmetro with_ log definido como ‘TRUE’. Esta última opção irá escrever todas as ocorrências deste erro no registo de aplicações do Visualizador de Eventos, mesmo que o RAISERROR não especifique com o LOG., Simplificado RAISERROR sintaxe
RAISERROR (error, severity, state) WITH LOG
Por exemplo,
RAISERROR ('Test Severity 16', 16, 1) WITH LOG
retorna o seguinte erro para a janela de mensagens no Query Analyzer:
Error Number InfoServer: Msg 50000, Level 16, State 1, Line 1Error Text Test Severity 16
a primeira linha é O Número do Erro Info, conforme a Tabela 1 descreve. O analisador de consultas não mostra esta informação para a gravidade 10. A cor de exibição muda de preto para as severidades 1 a 9 Para vermelho para 11 e mais. The sample script in Listing 1 shows additional syntax and ideas for using RAISERROR, including using multiple languages and parameterization., Para obter mais informações sobre o uso do RAISERROR e as várias severidades, consulte BOL sob os seguintes tópicos: mensagens de erro, níveis de gravidade da mensagem de erro, RAISERROR, usando RAISERROR, FORMATMESSAGE, e xp_ logevent.
além da gravidade, RAISERROR também suporta um estado. Muitos scripts de criação de objetos criam um banco de dados e, em seguida, tabelas, procedimentos, e assim por diante dentro do banco de dados recém-criado. Mas e se o script não criou a base de dados corretamente? Todos os objetos adicionais (e.g.,, tabelas, procedimentos) seria criado em seu banco de dados padrão, que para administradores de sistemas pode ser mestre. Criar todos os seus objetos de banco de dados definidos pelo usuário na base de dados mestre é exatamente o que você não quer, então quando você está programando um processo automatizado, você pode incluir um valor para o estado que termina o script se um erro fatal (por sua definição) ocorrer.
no entanto, a definição do valor do Estado nem sempre parece terminar a sessão. Aplicações como o analisador de consultas podem se reconectar automaticamente quando uma conexão é quebrada., Então, para ver completamente o benefício da opção estado, você precisa usar uma ferramenta como o osql.exe, que não se reconecta automaticamente após uma conexão ser quebrada. Aqui está uma maneira de testar a opção do estado. A partir da linha de comandos, escreva
osql -E -q"RAISERROR('Test Severity 16', 16, 1) WITH LOG"
este código devolve
Test Severity 161>
e você permanece no osql.exe. A execução da seguinte linha a partir de uma linha de comandos:
osql -E -q"RAISERROR('Test State 127', 16, 127) WITH LOG"
devolve a mensagem de erro
Test State 127
e devolve-o à linha de comandos, saindo do osql.exe. Se utilizar osql.,exe para criar um erro com um estado de 127 após uma criação de banco de dados falhar, o estado de erro termina a conexão e, consequentemente, o resto do script, para que você não crie objetos no banco de dados errado.
no início do programa de criação de bases de dados TSQLTutorJoins.sql, disponível a partir do link” Baixar o código ” no topo da página, é o seguinte código:
Se o banco de dados não é criado, a conexão é quebrada e a parte de criação de objeto do script não executa. I set it up this way to let you determine what the errors are (e.g.,, fora do espaço em disco, caminho incorreto) antes do restante do script Executar. Sem este código, se a criação do banco de dados falhar e o script continuar, ele criaria todos os objetos de teste em seu banco de dados padrão.
Quando você está automatizando scripts, terminar a execução em um erro grave pode ser extremamente útil. Ao aumentar um erro com uma alta gravidade, registrando-o no diário de Aplicação do Visualizador de Eventos, e mais importante, elevando-o com um estado de 127, você garante que nenhum objeto de script é criado no banco de dados errado., Além disso, ao registrá-lo no registo de aplicações do Visualizador de Eventos, você tem uma pista de auditoria do evento.