Ошибка в вашем скрипте в предложении MOVE
.
Вы должны использовать логические имена файлов вашей базы данных (по одному MOVE
для каждого логического имени) вместо @DBName
каждый раз.
Вы можете получить логические имена файлов, выполнив следующий запрос к вашей базе данных:
select name, filename from sysfiles
name
- логическое имя файла базы данных.
filename
находится сейчас на диске.
По умолчанию базы данных SQL Server имеют только два файла базы данных (база данных и журнал), но их может быть больше (база данных может быть разбита на несколько файлов).
Логические имена часто бывают такими:
DatabaseName
или DatabaseName_Data
для файла базы данных
DatabaseName_Log
для файла журнала
... но, к сожалению, вы не можете полагаться на это, потому что вы можете дать файлам любое имя, какое захотите.
Если вы действительно хотите написать это в общем виде и у вас есть более одной базы данных, это самый простой способ убедиться, что все базы данных имеют одинаковое количество файлов базы данных и что все логические имена соответствуют одному и тому же шаблону ( например DatabaseName_Data
и DatabaseName_Log
).
Если вы этого не сделаете, вы должны получить количество файлов базы данных и их логические имена на лету, что сделает SP более сложным.