通过 SQL-脚本恢复/等待恢复完成
Restore by SQL-Script / wait for restore to finish
在我恢复数据库的脚本中,我遇到了另一个问题。恢复数据库后,我想编辑其中的一些表。所以普通恢复查询后:
RESTORE DATABASE @DBname
FROM DISK = @BackupFileLocation
GO
我想编辑上述表格。问题是我需要在恢复后使用一些变量来编辑表,我在它之前声明(我需要它们)。 GO
似乎重置了所有变量,所以我以后不能使用它们。但是如果我在没有 GO
的情况下尝试它,它会跳过恢复查询并说我要编辑的数据库不存在。
我的问题:是否有另一种方法可以等待还原完成,直到它继续编辑表?
这是一种方法:设置一个临时 table(#table,而不是@variable),用您的值填充它,然后将您的变量设置为这些值。例如:
-- This will drop the temp table if it already exists.
-- Essential for repetitive testing!
IF object_id('tempdb.dbo.#Foo') is not null
DROP TABLE #Foo
GO
CREATE TABLE #Foo
(
DBName varchar(100) not null
,BackupFileLocation varchar(1000) not null
)
INSERT #Foo values ('MyDatabase', 'C:\SQL_Backups\SampleDBs')
DECLARE
@DBname varchar(100)
,@BackupFileLocation varchar(1000)
SELECT
@DBname = DBName
,@BackupFileLocation = BackupFileLocation
from #Foo
PRINT '-- Before restore --------------------'
PRINT @DBname
PRINT @BackupFileLocation
-- Note: I did not test this statement
RESTORE DATABASE @DBname
FROM DISK = @BackupFileLocation
GO
DECLARE
@DBname varchar(100)
,@BackupFileLocation varchar(1000)
SELECT
@DBname = DBName
,@BackupFileLocation = BackupFileLocation
from #Foo
PRINT ''
PRINT '-- After restore --------------------'
PRINT @DBname
PRINT @BackupFileLocation
GO
在我恢复数据库的脚本中,我遇到了另一个问题。恢复数据库后,我想编辑其中的一些表。所以普通恢复查询后:
RESTORE DATABASE @DBname
FROM DISK = @BackupFileLocation
GO
我想编辑上述表格。问题是我需要在恢复后使用一些变量来编辑表,我在它之前声明(我需要它们)。 GO
似乎重置了所有变量,所以我以后不能使用它们。但是如果我在没有 GO
的情况下尝试它,它会跳过恢复查询并说我要编辑的数据库不存在。
我的问题:是否有另一种方法可以等待还原完成,直到它继续编辑表?
这是一种方法:设置一个临时 table(#table,而不是@variable),用您的值填充它,然后将您的变量设置为这些值。例如:
-- This will drop the temp table if it already exists.
-- Essential for repetitive testing!
IF object_id('tempdb.dbo.#Foo') is not null
DROP TABLE #Foo
GO
CREATE TABLE #Foo
(
DBName varchar(100) not null
,BackupFileLocation varchar(1000) not null
)
INSERT #Foo values ('MyDatabase', 'C:\SQL_Backups\SampleDBs')
DECLARE
@DBname varchar(100)
,@BackupFileLocation varchar(1000)
SELECT
@DBname = DBName
,@BackupFileLocation = BackupFileLocation
from #Foo
PRINT '-- Before restore --------------------'
PRINT @DBname
PRINT @BackupFileLocation
-- Note: I did not test this statement
RESTORE DATABASE @DBname
FROM DISK = @BackupFileLocation
GO
DECLARE
@DBname varchar(100)
,@BackupFileLocation varchar(1000)
SELECT
@DBname = DBName
,@BackupFileLocation = BackupFileLocation
from #Foo
PRINT ''
PRINT '-- After restore --------------------'
PRINT @DBname
PRINT @BackupFileLocation
GO