Eu tenho um banco de dados que possui colchetes em seu nome. (Não pergunte! :-\)
Ele aparece no SSMS, mas não no Azure porque foi cancelado durante a criação. Não aparece na listagem do banco de dados no Azure. Ele aparece no SSMS, mas não pode ser excluído clicando com o botão direito. Gostaria de eliminá-lo usando SQL, mas não consigo descobrir a sintaxe para incluir os colchetes como caracteres para o nome do banco de dados, em oposição ao caractere de escape/delimitador.
Eu tentei o seguinte sem sucesso:
descartar banco de dados [xxx_2024-07-24]
Msg 911, Nível 16, Estado 1, Linha 1 Banco de dados 'xxx_2024-07-24' não existe. Certifique-se de que o nome foi digitado corretamente.
descartar banco de dados [[xxx_2024-07-24]]
Msg 105, Nível 15, Estado 1, Linha 1 Aspas não fechadas após a sequência de caracteres '[xxx_2024-07-24]'. Msg 102, Nível 15, Estado 1, Linha 1 Sintaxe incorreta próxima a '[xxx_2024-07-24]'.
descartar banco de dados [[[xxx_2024-07-24]]]
Msg 911, Nível 16, Estado 1, Banco de dados da linha 1 '[[xxx_2024-07-24]' não existe. Certifique-se de que o nome foi digitado corretamente.
Alguma ideia sobre a sintaxe correta para eliminar esse banco de dados? [xxx_2024-07-24]
Com
SET QUOTED_IDENTIFIER
definido comoON
(como sempre deveria ser):Você também pode escapar dos colchetes, mas isso é menos legível:
[
inicia o identificador delimitado.[
faz parte do identificador.]]
são escapados]
como parte do identificador.]
completa o identificador delimitado.Como Martin Smith apontou, você pode usar a função QUOTENAME() para ver o escape correto se não se lembrar das regras exatas de escape.
Por exemplo:
OK, encontrei a solução enquanto digitava esta pergunta. A pista está na mensagem de erro final.
descartar banco de dados [[[xxx_2024-07-24]]]
Msg 911, Nível 16, Estado 1, Banco de dados da linha 1 ' [[xxx_2024-07-24] ' não existe. Certifique-se de que o nome foi digitado corretamente.
Dê uma olhada no nome do banco de dados emitido na mensagem de erro. Os colchetes estão desequilibrados. Há um no final, mas dois no início. A partir disso, deduzo que, se eu deixar os três colchetes finais como inseridos, mas reduzir os colchetes iniciais para two , isso deverá funcionar:
descartar banco de dados [[xxx_2024-07-24]]]
SIM! Isso funciona!
Talvez um dia eu descubra o porquê desse mistério da codificação. Por enquanto, observe para si mesmo e para todos os outros:
Não inclua colchetes como caracteres literais no nome de qualquer artefato de banco de dados!!!