Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从.bak文件还原时,能否将表重命名为新数据库?_Sql Server_Tsql_Restore - Fatal编程技术网

Sql server 从.bak文件还原时,能否将表重命名为新数据库?

Sql server 从.bak文件还原时,能否将表重命名为新数据库?,sql-server,tsql,restore,Sql Server,Tsql,Restore,因此,我几乎已经编写了从SQL 2008到2016年间必须从备份文件恢复的所有SQL代码。问题是,其中一个名为Students的表在旧数据库和新数据库中具有相同的表结构(我也正在恢复到一个新数据库),但在旧数据库中,Students的名称是Stdnents。有什么方法可以正确恢复吗 RESTORE FILELISTONLY FROM DISK='f:\newBDbackup.bak' declare @DefaultData nvarchar(512) exec master.dbo.xp_i

因此,我几乎已经编写了从SQL 2008到2016年间必须从备份文件恢复的所有SQL代码。问题是,其中一个名为Students的表在旧数据库和新数据库中具有相同的表结构(我也正在恢复到一个新数据库),但在旧数据库中,Students的名称是Stdnents。有什么方法可以正确恢复吗

RESTORE FILELISTONLY FROM DISK='f:\newBDbackup.bak'

declare @DefaultData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultData', @DefaultData output

declare @DefaultLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'DefaultLog', @DefaultLog output

declare @DefaultBackup nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'BackupDirectory', @DefaultBackup output

declare @MasterData nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg0', @MasterData output
select @MasterData=substring(@MasterData, 3, 255)
select @MasterData=substring(@MasterData, 1, len(@MasterData) - charindex('\', reverse(@MasterData)))

declare @MasterLog nvarchar(512)
exec master.dbo.xp_instance_regread N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer\Parameters', N'SqlArg2', @MasterLog output
select @MasterLog=substring(@MasterLog, 3, 255)
select @MasterLog=substring(@MasterLog, 1, len(@MasterLog) - charindex('\', reverse(@MasterLog)))

select 
    isnull(@DefaultData, @MasterData) DefaultData, 
    isnull(@DefaultLog, @MasterLog) DefaultLog,
    isnull(@DefaultBackup, @MasterLog) DefaultBackup

declare @NewDefaultData nvarchar(512)
select isnull(@NewDefaultData, CONVERT(nvarchar(512), @DefaultData))
declare @NewDefaultLog nvarchar(512)
select isnull(@NewDefaultLog, CONVERT(nvarchar(512), @DefaultLog)) 

RESTORE DATABASE NewSqlDatabase FROM DISK='f:\newBDbackup.bak'
WITH
    MOVE 'newDatabase' TO @NewDefaultData,
    MOVE 'newDatabase_log' TO @NewDefaultLog

我不确定我是否理解这个问题,但您能否在恢复后立即将表“Stdnents”重命名为“Students”(sp_rename)

也许您可以解决这个问题。创建数据库的新实例(使用旧的Stdnents表名),使用不正确的表名从备份中还原,然后执行从Stdnents到StudentsHow的insert语句。insert语句会起作用吗?它将类似于:使用TargetDb进入dbo。学生(field1,field2,field3)选择field1,field2,SourceDatabase.dbo.stdnentsb中的字段3但还原不会失败吗?由于旧数据库中的表与新数据库中的表完全相同,只有一个命名错误。这意味着您可以将当前数据库中的表“Students”重命名为“Stdnents”,从备份中还原,然后将表重新重命名为Students。