Estou pronto para arrancar meu cabelo. Fiz um script para fazer backup e restaurar banco de dados e grupo de arquivos que cria consultas como:
RESTORE DATABASE [dashdb_dev01_2024-04-11 143711] FROM DISK = 'E:\SQL2019_Data\Backup\dev01\20240410\1437\dashdb_dev01_2024-04-11 143711.bak' WITH REPLACE, RECOVERY, MOVE [dashdb_dev01_2024-04-11 143711] TO 'E:\SQL2019_Data\Backup\OLD\dashdb_dev01_2024-04-11 143711.mdf'
E eu consegui:
Msg 102, Level 15, State 1, Server FRPARPLMA-DBDEV, Line 1 Incorrect syntax near 'dashdb_dev01_2024-04-11 143711'.
Eu uso [...]
para escapar do nome do banco de dados, mas entendo pelo MSG 102 que é o 102º caractere (estou bem aqui?). Então é o 'E:\SQL2019_Data\Backup\dev01\20240410\1437\dashdb_dev01_2024-04-11 143711.bak'
depois do FROM DISK
.
Como posso escapar, penso eu, do espaço aqui?
Se você formatar seu comando em várias linhas, receberá uma mensagem de erro mais específica.
Comando de restauração
Mensagem de erro
Estúdio de gerenciamento do SQL Server
Se você olhar a declaração no SSMS, notará uma parte sublinhada em vermelho:
É aqui que o erro está ocorrendo.
Solução
A sintaxe do
RESTORE ...
comando está bem documentada em Instruções RESTORE (Transact-SQL) e a solução é usar aspas simples'
para o nome lógico de acordo com esta seção da documentação:Então seu script ficaria assim: