Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 2012数据库恢复到SQL Server 2008 R2?_Sql_Sql Server_Database_Sql Server 2008 R2_Sql Server 2012 - Fatal编程技术网

如何将SQL Server 2012数据库恢复到SQL Server 2008 R2?

如何将SQL Server 2012数据库恢复到SQL Server 2008 R2?,sql,sql-server,database,sql-server-2008-r2,sql-server-2012,Sql,Sql Server,Database,Sql Server 2008 R2,Sql Server 2012,我正在尝试将SQL Server 2012中的备份恢复到SQL Server 2008 R2,但出现错误 指定的强制转换无效。(SqlManagerUI) 如果您对此有任何解决方案,请发表意见 谢谢 您不能,您永远无法从更高版本的SQL Server还原到更低版本的SQL Server。您唯一的选择是编写数据库脚本,然后通过SSI、BCP、链接服务器传输数据,或者编写数据脚本,您将无法从2012恢复到2008。您将能够使用类似于复制模式等的工具(前提是不使用任何特定于2012的工具)。如果你也有

我正在尝试将SQL Server 2012中的备份恢复到SQL Server 2008 R2,但出现错误

指定的强制转换无效。(SqlManagerUI)

如果您对此有任何解决方案,请发表意见


谢谢

您不能,您永远无法从更高版本的SQL Server还原到更低版本的SQL Server。您唯一的选择是编写数据库脚本,然后通过SSI、BCP、链接服务器传输数据,或者编写数据脚本,您将无法从
2012
恢复到
2008
。您将能够使用类似于复制模式等的工具(前提是不使用任何特定于2012的工具)。如果你也有数据要复制,你可以使用他们的工具,我想你可以得到14天的免费试用。

将数据库从一个SQL Server版本“降级”到较低版本的唯一内置方法是:编写整个数据库、模式和数据的脚本,然后在目标服务器上执行脚本


这是可以做到的,但往往很残酷。

右键单击数据库,然后选择任务->生成脚本

选择要恢复的内容,或者默认情况下只选择完整的数据库

现在单击下一步->单击高级,然后选择“服务器版本脚本”到要恢复的“ssms版本”,如2008或2008 R2或其他版本

另外,选择“要编写脚本的数据类型”到“架构和数据”

最后,在目标SSM上执行这个.sql文件,并在第一行Use Database中更改数据库名称


如果数据库不存在,则创建一个数据库,如果执行脚本时出错,则从alter关键字执行脚本以完成底部。

如前所述,您不能使用“备份”和“还原”功能从SQL Server 2012数据库转到SQL Server 2008数据库。然而,我编写的一个程序将连接到SQL Server数据库,并编写一个数据库、其模式和数据的脚本。它可以从BitBucket进行git克隆,并使用Visual Studio 2010或更高版本进行编译(如果是更高版本,只需打开
.csproj
)。

注意,上面的一些答案已经过时了!这一切都可以在SQL SERVER MANAGEMENT STUDIO(SQL MS)中完成。


有很多方法可以用来“降级”数据库,但我最近发现了一种方法,我相信在SQL MS 2012的早期版本中找不到这种方法,那就是复制数据库向导。以下是如何将数据库从2012服务器实例复制到2008 R2实例:

  • 在2012实例中,右键单击要复制的数据库/“降级”,然后选择“任务”>“复制数据库…”

  • “欢迎使用复制数据库向导”单击[下一步]

  • “选择源服务器”:将“源服务器”设置为2012实例(或更高版本的服务器实例),并设置相应的身份验证。单击[下一步]。[注意。服务器代理服务必须正在运行]

  • “选择目标服务器:”将“目标服务器”设置为2008 R2(或更低版本的实例),并设置适当的身份验证。单击[下一步]。[注意。服务器代理服务必须正在运行]

  • “选择传输方法”对于本例,请选择“使用SQL管理对象方法”,单击[下一步]

  • 选择要移动或复制所需的数据库,请单击[下一步]

  • 配置目标数据库路径和逻辑名称等。如果数据库存在,请选择所需选项。单击[下一步]

  • 要配置integration services软件包,请单击[下一步]

  • 对于本例,选择“立即运行”选项作为“计划包”选项,单击[下一步]

  • “完成向导”,单击[完成]执行包并创建“降级”数据库

  • 你完成了,快乐的日子。:]


    我发现的另一个方法是SQL数据库迁移向导,它是由Microsoft创建的,我认为(我不知道)上面的向导是从中创建的。到这儿来。要使用此软件包将数据库从SQL Server 20012迁移到2008 R2,可以执行以下操作:

    注意。微软现在已经从Codeplex中删除了SQLAzureMW。我已亲自将其提供

  • 运行SQLAzureMW.exe

  • 从主窗口右侧选择分析/迁移单选按钮

  • 选择目标服务器为“SQL数据库最新服务版本(V12)”。单击[下一步]

  • 连接到SQL Server 2012实例。我的机器的服务器名为“VAIOE\SQLSERVER2012”,使用Windows身份验证,从数据库选项和“保存登录信息”中选择“主数据库(列出所有数据库)”。单击[连接]

  • 选择要迁移的所需数据库[暂时使用GVH报告数据库]。单击[下一步]

  • 选择“为所有数据库对象编写脚本”

  • 单击[前进]并更改以下选项:

  • a。在“常规”下,将“目标服务器”设置为“SQL Server”

    b。在“表/视图选项”下,将“脚本表/数据”设置为“带数据的表模式”。将“数据库引擎存储过程”设置为“True”。将“安全功能”、“安全存储过程”和“系统功能”设置为“真”

    单击[确定]。单击[下一步]

  • 检查您的选择。单击[下一步]

  • 系统将提示“准备好生成脚本了吗?”,单击[是]。这将开始脚本生成。完成此操作后,单击[下一步]

  • 现在您将获得另一个连接对话框。这次选择目标服务器上的数据库(SQLServer2008R2实例)。选择masterdatabase,这样就可以选择目标数据库。单击[连接]

  • 现在,您可能希望迁移到一个新的数据库中,因此单击[Create D]
    -- save below output in a bat file by executing below in SSMS in TEXT mode
    
    -- clean up: create a bat file with this command --> del D:\BCP\*.dat 
    
    select '"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe" ' /* path to BCP.exe */
        +  QUOTENAME(DB_NAME())+ '.' /* Current Database */
        +  QUOTENAME(SCHEMA_NAME(SCHEMA_ID))+'.'            
        +  QUOTENAME(name)  
        +  ' out D:\BCP\'  /* Path where BCP out files will be stored */
        +  REPLACE(SCHEMA_NAME(schema_id),' ','') + '_' 
        +  REPLACE(name,' ','') 
        + '.dat -T -E -SServerName\Instance -n' /* ServerName, -E will take care of Identity, -n is for Native Format */
    from sys.tables
    where is_ms_shipped = 0 and name <> 'sysdiagrams'                       /* sysdiagrams is classified my MS as UserTable and we dont want it */
    /*and schema_name(schema_id) <> 'unwantedschema'    */                             /* Optional to exclude any schema  */
    order by schema_name(schema_id)
    
    --- Execute this on the destination server.database from SSMS.
    
    --- Make sure the change the @Destdbname and the bcp out path as per your environment.
    
    declare @Destdbname sysname
    set @Destdbname = 'destinationDB' /* Destination Database Name where you want to Bulk Insert in */
    select 'BULK INSERT '
    /*Remember Tables must be present on destination database */ 
    + QUOTENAME(@Destdbname) + '.' 
    + QUOTENAME(SCHEMA_NAME(SCHEMA_ID)) 
    + '.' + QUOTENAME(name) 
    + ' from ''D:\BCP\' /* Change here for bcp out path */ 
    + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') 
    + '.dat'' with ( KEEPIDENTITY, DATAFILETYPE = ''native'', TABLOCK )' 
    + char(10) 
    + 'print ''Bulk insert for ' + REPLACE(SCHEMA_NAME(schema_id), ' ', '') + '_' + REPLACE(name, ' ', '') + ' is done... ''' 
    + char(10) + 'go'
    from sys.tables
    where is_ms_shipped = 0
    and name <> 'sysdiagrams' /* sysdiagrams is classified my MS as UserTable and we dont want it */
    --and schema_name(schema_id) <> 'unwantedschema' /* Optional to exclude any schema */
        order by schema_name(schema_id)