【问题标题】:How to execute very long SQL statement from sql file in visual studio如何在 Visual Studio 中从 sql 文件执行很长的 SQL 语句
【发布时间】:2014-02-01 13:16:06
【问题描述】:

我必须从很长的csv 文件更新我的数据库。我生成了很长的 sql 语句,并尝试直接在 Visual Studio 中执行它,但由于 Visual Studio 无法进行如此长的查询,因此出现错误。

SQL 文件内容:

INSERT INTO [HotelFacilitySet]
VALUES ('SPA');

任何人都可以解释如何从 Visual Studio 执行 .sql 文件。

谢谢。

【问题讨论】:

  • 这就是您要运行的查询?
  • 这只是一个示例,文件大约 100mb。
  • 您在 Visual Studio 中遇到什么错误?
  • 您想以编程方式执行此操作吗?

标签: c# asp.net sql visual-studio-2010


【解决方案1】:

对于这么大的数据集,我建议使用 bcp 加载 .sql 文件。见http://technet.microsoft.com/en-us/library/aa337544.aspx

【讨论】:

    【解决方案2】:

    对此有无数的解决方案,具体取决于 CSV 文件的实际内容,以及这种情况需要发生的频率。(我假设这只需要发生一次)。

    1. SSMS 中内置的导入数据向导
    2. 集成服务
    3. 一些小脚本

    我个人会先选择第一个选项,然后试试我的向导运气,尽管我希望这不适用于像这样的大文件。

    接下来我会尝试第三个选项并编写一个 c# 脚本来读取文件并定期导入。

    它确实取决于 CSV 的实际内容

    【讨论】:

      【解决方案3】:

      我从来没有尝试使用 SQL Server 中的任何内置选项加载文件。也许其他人有,但自 2008 年以来,我几乎在每个版本的 SQL Server 上都尝试了几次,但没有运气(SQL Server 糟糕的众多原因之一)。

      话虽如此,我的首选是 CSV 文件上的流阅读器以及插入语句。这是我的伪代码:

      //read file using FileStream and break into chunks of 250 items each (or maybe some other number depending on size of object)
      //The key is that Chunkify needs to return an enumerable that reads the file as your code is executing.
      var chunks = Chunkify(file);
      
      foreach(var chunk in chunks)
      {
      
      var stmt = new StringBuilder("INSERT INTO [HotelFacilitySet] VALUES (");
      
      //Each chunk is a set of items
      foreach(item in chunk) {
        stmt.Append(item);
        stmt.Append("),(");
      }
      stmt.Append(")");    
      ExecuteSql(stmt);
      
      }   
      

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多