我尝试使用当前日期时间备份数据库以创建唯一的文件名。
我在' +'上的语法不断。在@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
我无法弄清楚要搜索什么,知道我做错了什么?
答案 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