【发布时间】:2017-10-25 04:10:16
【问题描述】:
我正在尝试创建一个简单的恢复游标,当我需要恢复多个数据库时将使用它。
每个数据库都有简单的恢复模型,并且都使用以下格式命名:DBname_AAAAMMDD_FULL
我想出了一个动态脚本,它可以一次性完成这项工作,但它不会增加光标上的数据字段。
这是我迄今为止尝试过的:
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
【问题讨论】:
标签: sql-server ssms sql-server-2014