难道大家没人会吗,
SQL Server上的差异备份还原据我观察应该是先还原最新的整个数据库备份,再还原差异数据库备份,我查了一下文档,是这样的:
1、还原最新的数据库备份。
2、还原最后一次的差异数据库备份。
3、如果使用完全恢复或大容量日志记录恢复,则应用自上次创建差异数据库备份后创建的所有事务日志备份。
用上述同样方法还原差异数据库时,系统提示 应该使用WITH RECOVERY或WITH STANDBY,但这样代码该如何写呢,希望大家踊跃发言,注意要用SQLDMO方式

解决方案 »

  1.   

    看来大家没人响应呀,我用SQL完成了,贴出来给大家分享
    BOOL bResult = ( FALSE );
    CWaitCursor curWait;
    if(!SQLDMO_EnumProcesses())
    {
    AfxMessageBox("停止进程失败");
    }
    try
    { CWizard* pSheet;   
    pSheet=(CWizard*)GetParent();
    SQLDMO::_SQLServer2Ptr spSqlServer2 = pSheet->m_spSqlServer2;
    CString csQuerySql=" RESTORE DATABASE " + m_strRestoredb + " FROM DISK ='" + pszAllDB + "' WITH NORECOVERY,REPLACE ";
    csQuerySql = csQuerySql + " RESTORE DATABASE " + m_strRestoredb + " FROM DISK ='" + pszIncreDB + "' WITH RECOVERY ";
    _bstr_t QuerySQL = (LPCTSTR)csQuerySql;
    SQLDMO::QueryResultsPtr spQueryResults = spSqlServer2->ExecuteWithResults(QuerySQL);
    CString csResult;
    csResult.Format("数据库[%s]还原成功!",m_strRestoredb);
    AfxMessageBox(csResult);
    bResult = ( TRUE );
    }
    catch ( _com_error e )
    {
    DisplayComError( e );
    }
    catch( CException* e )
    {
    DisplayAfxError( e );
    }
    catch( ... )
    {
    AfxMessageBox("未知错误!");
    }
    EndWaitCursor();
    return ( bResult );