2012-11-28 49 views

回答

1

我会在这里缩小到如何从SQL内部服务公开数据的普遍问题。有什么可以做的就是重写你的存储过程为Table Valued CLR function,流式传输结果。然后你可以使用这样的:

insert into MyTable(id, name) 
select id, name from dbo.MyTableFunc(agrs) 

这个基础设施是很好的优化,我用它,并能很快得到它每秒一些3K行,当我停下优化和瓶颈在获得网络上的行。

将服务作为函数公开的好处在于,您还可以直接在查询和连接中使用它,无需先将其存储在磁盘上的表中(慢磁盘的额外步骤,事务日志,锁yadayada) 。它还取消优雅,你可以做top 100

如果你告诉我们更多/给一些代码,我们可以帮助更多。

+0

其实,我第一次尝试使用CLR table-UDF的原因与你提到的相同。但是我遇到了一个问题,我需要能够仅投影一些列并且UDF具有预定义的模式。 所以,我试着用一个UDF解决它,它返回包含我想要投影的其他列的关键列和XML列。但是,由于xml序列化,它使得sqlclr变得极其缓慢,所以我将其改为使用存储过程。 现在,我使用没有sqlbulkcopy的存储过程(简单转换),它工作得很好,但它可能会成为1m +行的问题。 – Yshayy