Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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插入for循环_Sql_Sql Server_Insert Into_Logfile - Fatal编程技术网

SQL插入for循环

SQL插入for循环,sql,sql-server,insert-into,logfile,Sql,Sql Server,Insert Into,Logfile,如何在块中进行SQL Server提交插入?我需要将大量行从旧数据库复制到新表中,但它有几个问题: 完成需要很长时间,直到整个事务完成,我才在表中看到任何行 我的日志文件正在疯狂增长,可能会耗尽空间 如果中间有东西断了,我必须重复所有的事情。 如果我添加SET ROWCOUNT 500,我可以限制行数,但我不知道如何继续使用上次插入的ID。我可能会查询新表以查看上次插入的内容,但我不确定这样做是否正确。这有点困难,因为我的where子句没有使用ID列,所以我不知道如何确切地知道在哪里继续 最好的

如何在块中进行SQL Server提交插入?我需要将大量行从旧数据库复制到新表中,但它有几个问题:

  • 完成需要很长时间,直到整个事务完成,我才在表中看到任何行

  • 我的日志文件正在疯狂增长,可能会耗尽空间

  • 如果中间有东西断了,我必须重复所有的事情。

    如果我添加
    SET ROWCOUNT 500
    ,我可以限制行数,但我不知道如何继续使用上次插入的ID。我可能会查询新表以查看上次插入的内容,但我不确定这样做是否正确。这有点困难,因为我的
    where
    子句没有使用
    ID
    列,所以我不知道如何确切地知道在哪里继续

    最好的方法是什么?是否有一个“for循环”或其他允许我偶尔提交的东西

    我正在使用SQLServer2008R2的SSMS

    如何在块中进行SQL Server提交插入

    您可以编写代码,将其分块插入,非常简单

    1:是的,你知道,交易就是这样运作的

    2:是的,你知道,交易就是这样运作的

    3:是的,猜猜看——这就是交易的运作方式,你知道;)

    但我不知道如何继续使用最后插入的ID

    叫做编程。在客户端生成ID。还记得上一次生成的吗

    一般来说,我建议不要在代码中插入,这听起来像是数据复制操作,这取决于代码的工作方式,还有其他机制(批量复制接口)

    我正在使用SQL Server 2008 R2的SSMS

    基本上,它的行为就像你编程一样。您可以轻松地在SSMS端放入一些循环,或者导出到一个文件,然后批量插入该文件。但不会帮助您完成第2项。。。除非您选择简单备份模式,而不关心恢复

    同样,3是复杂的-你如何正确地重新启动?许多附加代码


    最好的方法取决于具体情况,可悲的是,你太模糊了,无法做出比瞎猜更多的猜测。

    即使TomTom的答案是讽刺性的,但它包含两个基本选项,这可能会帮助你:

  • 您可以用T-SQL编写一个循环(参见示例),并使用TOP和OFFSET选择块(您需要一个orderby)。您可以根据需要最大限度地减少出血。如果你只是担心重新启动而不重做所有事情,这应该是好的,虽然我不期望它会很快

  • 您可以将所选内容导出到文件中,并使用大容量插入加载该文件


  • 您还可以找到更多选项。

    那怎么办?@danihp:可以过滤吗?我的意思是,添加一个
    where
    子句?它似乎只复制整个表。也许这可以帮助您:。另外,
    BATCHSIZE=batch\u size
    对您来说还不够(而是where子句)?@danihp:问题是,我只想导入指定时间段的数据(因此我需要查询特定列)。大容量插入从数据文件导入数据。您应该仅创建数据文件,其中应导入行。或者你可以导入到一个临时表中,然后根据需要将数据合并到最终的表中。先生,1000个互联网,这是一个简洁而有用的答案。嘿,你最近似乎有点兴奋。也许你需要休个小假。你知道,放松点,放松点。谢谢,这是很有帮助的,尽管最后我写了一个小的控制台应用程序来传输数据。