使用当前日期备份SQL Server数据库

时间:2017-09-26 10:44:06

标签: sql-server datetime stored-procedures

我尝试使用当前日期时间备份数据库以创建唯一的文件名。

我在' +'上的语法不断。在@TimeDate之前

我的代码:

ALTER PROCEDURE [dbo].[BackUpDatabase]
(@DatabaseName Varchar(256))
AS
Begin
DECLARE @TimeDate Varchar(256);
SET @TimeDate = CONVERT(Varchar(256),GETDATE(), 113);
BACKUP DATABASE @DatabaseName
TO DISK = 'C:\SQLEXPRESSBACKUP\DB'+ @TimeDate + '.bak'
WITH NOFORMAT, INIT, NAME= @DatabaseName, SKIP, NOREWIND, NOUNLOAD, STATS=10
END

我无法弄清楚要搜索什么,知道我做错了什么?

3 个答案:

答案 0 :(得分:1)

您可以声明变量@ExecuteQuery,然后将此变量值分配给TO DISK

喜欢这个。

DECLARE @ExecuteQuery Varchar(1000);
SET @ExecuteQuery  = 'C:\SQLEXPRESSBACKUP\DB' +  CONVERT(Varchar(256),GETDATE(), 113) + '.bak'
BACKUP DATABASE @DatabaseName
TO DISK = @ExecuteQuery 
WITH NOFORMAT, INIT, NAME= @DatabaseName, SKIP, NOREWIND, NOUNLOAD, STATS=10

答案 1 :(得分:1)

首先,看一下DECLARE @TimeDate Varchar(256); SET @TimeDate = CONVERT(Varchar(256),GETDATE(), 113); SELECT @TimeDate 值生成的内容:

26 Sep 2017 11:49:07:650

<强>产地:

:

当附加到字符串时,这不是可接受的文件名。因此,您需要清除此内容以删除SET @TimeDate = REPLACE(CONVERT(Varchar(256),GETDATE(), 126), ':',''); 个字符。

TO DISK = 'C:\SQLEXPRESSBACKUP\DB'+ @TimeDate + '.bak'

其次,它不喜欢你在这里连接一个字符串,所以使用一个变量,你可以在之前准备:

DECLARE @location VARCHAR(100) = 'C:\SQLEXPRESSBACKUP\DB' + @timedate + '.bak'

更改为:

DECLARE @TimeDate Varchar(256);
SET @TimeDate = REPLACE(CONVERT(Varchar(256),GETDATE(), 126), ':','');
DECLARE @location VARCHAR(100) = 'C:\SQLEXPRESSBACKUP\DB' + @timedate + '.bak'
BACKUP DATABASE @DatabaseName
TO DISK = @location
WITH NOFORMAT, INIT, NAME= @DatabaseName, SKIP, NOREWIND, NOUNLOAD, STATS=10

完整的消息:

_mockClient.Setup(m => m.MyMethod(It.IsAny<int>())).Verifiable();

答案 2 :(得分:0)

您需要使用动态SQL来构建查询,而不是尝试添加变量:

family.forEach((value) => {
    document.getElementById('aaron-family').innerHTML += `
        <div class="col">
            <button type="button" class="list-group-item">${value}</button>
        </div>
    `;
});

ALTER PROCEDURE [dbo].[BackUpDatabase](@DatabaseName VARCHAR(256)) AS BEGIN DECLARE @TimeDate VARCHAR(256); SET @TimeDate = CONVERT(VARCHAR(256), GETDATE(), 113); DECLARE @sql VARCHAR(MAX); SET @sql = ' BACKUP DATABASE ['+@DatabaseName+'] TO DISK = ''C:\SQLEXPRESSBACKUP\DB'+@TimeDate+'.bak'' WITH NOFORMAT, INIT, NAME= '''+@DatabaseName+''', SKIP, NOREWIND, NOUNLOAD, STATS=10'; PRINT @sql; --exec (@sql) END; 将显示将要运行的内容,如果您对此感到满意,请将其删除并取消注释PRINT @SQL