我使用的是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而不杀死服务器。
任何帮助都会很棒。
答案 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中获得令人讨厌的内存错误