2014-11-18 4 views
-1

У меня возникла проблема с правильной работой моего сценария резервного копирования/сжатия.Ошибка SQL Server Backup and Shrink Script

Я получаю сообщение об ошибке

Msg 102, Level 15, State 1, Line 12
Неправильный синтаксис около 'CONCAT'.

Msg 102, Level 15, State 1, Line 15
Неправильный синтаксис около «CONCAT'.`

Ошибка каждый раз, когда я пытаюсь запустить его.

Вы можете помочь?

Declare @dbname VarChar(250); 
Declare @logfile VarChar(1000); 
Declare @baklocation VarChar(1000) = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\BACKUP\'; 

Select @dbname = name From sys.databases Where name Not In ('master', 'tempdb', 'model', 'msdb'); 
While @@rowcount <> 0 
Begin 
    Alter DATABASE [@dbname] Set RECOVERY SIMPLE With NO_WAIT; 

    Backup Database @dbname 
     TO DISK = CONCAT(@baklocation, @dbname, '\', @dbname, '_', Convert(Varchar(500),GetDate(),112), '.bak'); 

    Backup Log @dbname 
     TO DISK = CONCAT(@baklocation, @dbname, '\', @dbname, '_', Convert(Varchar(500),GetDate(),112), '.log.bak'); 

End; 

SELECT @logfile = filename FROM SYSALTFILES Where groupid = 0 AND dbid > 4; 
While @@rowcount <> 0 
Begin 
    DBCC SHRINKFILE(@logfile, 1); 
End; 
+2

' CONCAT' является ** новой функцией ** в SQL Server ** 2012 ** - это ** не ** доступно в более ранних версиях, поэтому, если это выполняется против SQL Server 2008, очевидно, что вы получите ошибки .... –

ответ

1

Вы можете попробовать это:

CONCAT доступна в 2012 или Большого

Итак, создайте Variable и Назначают эти значения IT

Source

Declare @dbname VarChar(250); 
Declare @logfile VarChar(1000); 
Declare @baklocation VarChar(1000) = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\BACKUP\'; 
Declare @Newvar nvarchar(MAx) 

Select @dbname = name From sys.databases Where name Not In ('master', 'tempdb', 'model', 'msdb'); 
While @@rowcount <> 0 
Begin 
    Alter DATABASE [@dbname] Set RECOVERY SIMPLE With NO_WAIT; 
set @Newvar= @baklocation + @dbname + '\' + @dbname + '_' + Convert(Varchar(500),GetDate(),112)+ '.bak' 
    Backup Database @dbname 
     TO DISK [email protected] ; 

    Backup Log @dbname 
     TO DISK = @Newvar; 

End; 

SELECT @logfile = filename FROM SYSALTFILES Where groupid = 0 AND dbid > 4; 
While @@rowcount <> 0 
Begin 
    DBCC SHRINKFILE(@logfile, 1); 
End; 
+0

Ugg 'Msg 5011, Level 14, State 5, Line 9 Пользователь не имеет разрешение на изменение базы данных «@dbname», база данных не существует или база данных не находится в состоянии, которое разрешает проверки доступа. – Kevin

+1

'GRANT ALTER ANY DATABASE TO your_login GO' –

+1

@Kevin Вам необходимо назначить разрешение на использование зарегистрированный пользователь для базы данных –