通过SQL脚本还原/等待还原完成

时间:2017-08-04 09:33:05

标签: sql-server sql-server-2014 database-restore

在我恢复数据库的脚本中,我遇到了另一个问题。恢复数据库后,我想编辑它的一些表。所以在常见的恢复查询之后:

RESTORE DATABASE @DBname
FROM DISK = @BackupFileLocation
GO

我想编辑上面提到的表格。问题是我需要在恢复之后使用一些变量来编辑表,我在它之前声明(我需要它们)。并且GO似乎重置了所有变量,因此我之后无法使用它们。但是,如果我在没有GO的情况下尝试它,它会跳过恢复查询并说我想编辑的数据库不存在。

我的问题:还有另一种等待恢复完成的方法,直到它继续编辑表格为止吗?

1 个答案:

答案 0 :(得分:1)

这是一种方法:设置临时表(#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