Sql server 增量控制字段-光标
我正在尝试创建一个简单的恢复游标,当我需要恢复多个数据库时将使用它 每个数据库都有简单的恢复模型,所有数据库都使用以下格式命名:DBname\u AAAAMMDD\u FULL 我已经提出了一个动态脚本,它将在一个istance中完成这项工作,但它不会增加光标上的数据字段 以下是我迄今为止所尝试的:Sql server 增量控制字段-光标,sql-server,ssms,sql-server-2014,Sql Server,Ssms,Sql Server 2014,我正在尝试创建一个简单的恢复游标,当我需要恢复多个数据库时将使用它 每个数据库都有简单的恢复模型,所有数据库都使用以下格式命名:DBname\u AAAAMMDD\u FULL 我已经提出了一个动态脚本,它将在一个istance中完成这项工作,但它不会增加光标上的数据字段 以下是我迄今为止所尝试的: DECLARE @SQL VARCHAR(MAX) DECLARE @DATE DATETIME = '20170926' DECLARE @DATE_CHAR CHAR(9) = CONVER
DECLARE @SQL VARCHAR(MAX)
DECLARE @DATE DATETIME = '20170926'
DECLARE @DATE_CHAR CHAR(9) = CONVERT(CHAR(9),@DATE,112)
DECLARE @DBName VARCHAR(MAX) = 'MyDB_'
DECLARE @DBFileName VARCHAR(MAX)
SELECT @DBNAME = (@DBNAME + @DATE_CHAR)
SELECT @DBName
SELECT @DBFileName = ('' + @DBNAME+'' +'_FULL_FRM.BAK') --This should match the physical file name
SELECT @DBFILENAME
WHILE (SELECT @DATE ) <= '20170930'
BEGIN
PRINT @DATE
SET @DATE = (@DATE +1)
IF (SELECT @DATE) > '20170930'
BREAK
ELSE
CONTINUE
END
还有这段代码,但两者都不起作用
DECLARE @SQL VARCHAR(MAX)
DECLARE @DATE DATETIME = '20170926'
DECLARE @DATE2 DATETIME
DECLARE @DATE_CHAR CHAR(9) = CONVERT(CHAR(9),@DATE,112)
DECLARE @DBName VARCHAR(MAX) = 'MYDB_'
DECLARE @DBFileName VARCHAR(MAX)
SELECT @DBNAME = (@DBNAME + @DATE_CHAR)
--23 = aaaa-mm-dd
--112 = aaaammdd
SELECT @DBName
SELECT @DBFileName = ('' + @DBNAME+'' +'_FULL_FRM.BAK') --This should tch the physical file name
SELECT @DBFILENAME
DECLARE Employee_Cursor CURSOR FOR
SELECT @DATE
WHERE @DATE < '20170930'
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @DATE <= '20170930'
BEGIN
SELECT @DATE = @DATE+1
PRINT @DATE
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
感谢GarethD和他在此处提供的有用信息,使我的查询能够正常工作,无需使用光标: 我需要的是一个将日期增加1天的循环,这样我就可以得到备份的正确名称。此查询可能不是最佳优化,但它可以工作 它仍然是一个WIP,像现在一样无用,但我明天会完成:
DECLARE @SQL VARCHAR(8000)
DECLARE @DATE DATETIME = '20170926'
DECLARE @TARGET_DATE DATETIME = '20171001'
DECLARE @CURRENTDATE DATETIME = @DATE
DECLARE @DATE_CHAR CHAR(9)
DECLARE @DBName VARCHAR(255) = 'MyDB_'
DECLARE @DBFileName VARCHAR(255)
DECLARE @DB_PATH VARCAR(8000)
SET @CurrentDate = @Date
WHILE ( @DATE < @TARGET_DATE)
BEGIN
BEGIN
SET @DBName = 'MyDB_'
SET @DATE = (@DATE +1)
SET @DATE_CHAR = CONVERT(CHAR(9),@DATE,112)
SELECT @DBNAME = (@DBNAME + @DATE_CHAR)
SELECT @DBFileName = ( @DBNAME +'_FULL_FRM.BAK') --This should match the physical file name
SELECT @SQL = 'USE ''[master]'' RESTORE DATABASE ' + @DBNAME + 'FROM DISK ''D:\BKP_PATH\' + @DBFileName + 'WITH FILE =1 '
END
SELECT @SQL
END
GO
到目前为止,我得到的是: