首页 > 解决方案 > 在 MS sql server-2008 中插入 100 万行

问题描述

我正在使用 Visual Studio 2010 将大量数据写入 sql server 2008 中的表中。但是常见的插入过程太慢并且数据丢失。我是 sql server 的新手,所以如何将 100 万行插入到 SQL Server 2008(本地数据库)中的现有表中。谢谢。

      int len = arrayNo.GetSize();
        for (int z=0 ;z<len;z++)
        {
            tmp1= arrayNo.GetAt(z);
            tmp2= arrayID.GetAt(z);
            tmp3= arrayDuration.GetAt(z);
            tmp4= arrayState.GetAt(z);
            CString str;
            str.Format(_T("('%s','%s','%s',%s)"),tmp1, tmp2,tmp3,tmp4);
            strQuery = _T("insert into  [Zhaoyangqing].[dbo].[GameStateOutput]  values ")+str; 
            theApp.ADOExecute(theApp.m_pADOSet, strQuery);
        }

标签: sql-servervisual-studio-2010visual-c++

解决方案


最简单的改进是将插入包装到事务中。这样,SQL Server 就不必在每一行之后刷新日志文件。

也许是这样的:

    strQuery = _T("begin transaction"); 
    theApp.ADOExecute(theApp.m_pADOSet, strQuery);

    int len = arrayNo.GetSize();
    for (int z=0 ;z<len;z++)
    {
        tmp1= arrayNo.GetAt(z);
        tmp2= arrayID.GetAt(z);
        tmp3= arrayDuration.GetAt(z);
        tmp4= arrayState.GetAt(z);
        CString str;
        str.Format(_T("('%s','%s','%s',%s)"),tmp1, tmp2,tmp3,tmp4);
        strQuery = _T("insert into  [Zhaoyangqing].[dbo].[GameStateOutput]  values ")+str; 
        theApp.ADOExecute(theApp.m_pADOSet, strQuery);
    }

    strQuery = _T("commit transaction"); 
    theApp.ADOExecute(theApp.m_pADOSet, strQuery);

带有视觉工作室 2010 的 sql server 2008

你为什么要使用这么旧且不受支持的软件?有更快的方法将数据加载到 SQL Server 中,但是对于您正在使用的内容来说会很困难。


推荐阅读