【问题标题】:SQL Server : large DB Query In ChunksSQL Server:块中的大型数据库查询
【发布时间】:2016-02-24 12:14:26
【问题描述】:

我正在使用 Microsoft SQL Server Management Studio,我在 SQL Server 方面的专业知识很少,但我过去使用过 MySQL,并且非常擅长。

我的问题是:我有一个相当大的数据库,包含超过 1.3 亿条记录。

我希望只获取 URL 列,但此列中的每条记录。

Microsoft SQL Server Management Studio 在保存到文件时由于一个或另一个错误而卡住,所以我得出的结论是我需要分块执行此操作。

我现在正在运行这个命令并保存到文件中

SELECT TOP 20000000 [URL] 
FROM [dbo].[siteentry] 
WHERE [Content] LIKE '' 

但是,当此命令完成时,我有 0 条线索如何跳过前 20,000,000 条并继续到下一批 20,000,000 条而不杀死服务器。

任何帮助都会很棒。

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    使用 SQL Server 2012,您可以使用 OFFSET...FETCH 命令:

    SELECT [URL] 
    FROM [dbo].[siteentry] 
    WHERE [Content] LIKE '' 
    ORDER BY (some column)
        OFFSET 20000 ROWS
        FETCH NEXT 20000 ROWS ONLY
    

    为此,您必须按表格中的某个列排序 - 您应该无论如何,因为没有 ORDER BYTOP .... 是无用的 -你会得到任意行

    【讨论】:

      【解决方案2】:

      您可以使用“偏移量”来跳过行。更多信息请查看https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx

      【讨论】:

        【解决方案3】:

        如果你想要的只是一个包含所有 url 的文本文件,那么我建议你使用bcp 命令行实用程序:

        bcp "SELECT url FROM [dbo].[siteentry] WHERE [Content] LIKE ''" queryout  Output.txt -S Server -T -d DatabaseName -c 
        

        它会立即生成文件,无需将其拆分为块,并且您不会因 SSMS 出现内存不足错误而烦恼

        【讨论】:

        • 哦,太好了,让我研究一下这个方法。谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 2011-02-28
        • 2020-02-10
        • 1970-01-01
        相关资源
        最近更新 更多