我在SQL Server中有一个表,我需要将其数据导出到.CSV
文件中。
以下是表格详情:
ProductId: PK, bigint
SupId: varchar(100)
CatalogId: FK, bigint
Price: float
没有索引。
CSV部分已完成,这意味着我已经尝试了几个可以将结果集写入CSV的库。
我被困的地方是SELECT *
需要很长时间才能执行。
直到现在我还没有成功运行
SELECT * FROM
现在,我知道运行SELECT *
是一个非常糟糕的主意,我已经阅读了不少帖子。
有没有办法流式传输或获取部分数据?这是C#的人,所以请原谅这个行话。
那么,我应该阅读/学习什么?
如何从SQL获取此类数据?
问候。
答案 0 :(得分:2)
Microsoft SQL Server的批量复制(bcp)命令使您能够直接从命令行插入大量记录
bcp mydb.dbo.mytable out "C:\mytable.csv" -c -T
更多:http://msdn.microsoft.com/en-us/library/ms162802.aspx
修改
你也可以在sql执行上使用bcp
bcp "SELECT * FROM mydb.dbo.mytable t1 join mydb.dbo.anothertbl t2 on (t1.id=t2.mytable_id)" QUERYOUT C:\mytable.csv -c -T
答案 1 :(得分:0)
这在很大程度上取决于
(d)您的硬件(服务器)支持的内容......
这个问题太宽泛了,不能回答。
此表有多少行和哪种列?你真的需要你的表中的所有列(SELECT *)
和所有行(no WHERE clause)
吗?如果你真的需要那张桌子上的所有东西 - 那真的没有"魔法"加快聚集索引扫描的方法
但请尝试使用LOCKS。 当用户访问数据时,数据会被锁定,以便其他用户无法修改或删除某人正在阅读的数据。
select * from sys_letter_intid WITH (NOLOCK)
SQL Server - when should you use “with (nolock)”
还有一些因素会影响到这一点。快速列出要查看的内容:
SELECT
陈述(即使用a
WHERE
}或JOINS
的{{1}},拥有索引会改善您的身份
性能,尤其是在具有数百万行的表上。哈希表
将在一张大桌子上做一个巨大的净积极。LEFT JOIN
使用NOT IN
条件。这真的只是冰山一角,但一些最容易实施的东西也将为你提供一些最大的性能提升。