SQL Server:大块数据库查询

时间:2016-02-24 12:14:26

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

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

我的问题是:我有一个相当大的数据库,有超过130万条记录。

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

由于一个错误或另一个错误,Microsoft SQL Server Management Studio在保存到文件时陷入困境,所以我得出的结论是我需要以块的形式执行此操作。

我正在运行此命令并保存到文件

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

然而,当这个命令结束时,我有0个线索如何跳过前20,000,000并继续下一批20,000,000而不杀死服务器。

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:5)

使用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

为了实现这一点,您必须按照表格中的某些列进行排序 - 无论如何 ,因为TOP ....没有ORDER BY没用 - 你会回到任意行

答案 1 :(得分:1)

您可以使用“偏移量”跳过行。查看https://technet.microsoft.com/en-us/library/gg699618(v=sql.110).aspx了解详情。

答案 2 :(得分:0)

如果你想要的只是一个包含所有网址的文本文件,那么我建议你使用bcp命令行工具:

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

它将立即生成文件,无需将其拆分成块,并且您不会从SSMS中获得令人讨厌的内存错误