sql-server – 可以从命名管道/ fifo读取Sql Server BULK INSERT
BULK INSERT / bcp是否可以从命名管道读取,fifo风格?
也就是说,不是从实际文本文件中读取,而是可以使BULK INSERT / bcp从另一个进程的写端上的命名管道中读取? 例如: >创建命名管道 要么: >创建4个命名管道 我发现的最接近的是this fellow(现在无法访问的站点),他设法写入一个带有bcp的命名管道,具有他自己的实用程序和用法,如下所示: start /MIN ZipPipe authors_pipe authors.txt.gz 9 bcp pubs..authors out .pipeauthors_pipe -T -n 但他无法逆转工作. 所以在我开始讨论傻瓜的差事之前,我想知道从带有BULK INSERT或bcp的命名管道读取是否有根本可能.如果可能的话,如何设置它? NamedPipeServerStream或.NET System.IO.Pipes命名空间中的其他内容是否足够? 例如,使用Powershell的example: [reflection.Assembly]::LoadWithPartialName("system.core") $pipe = New-Object system.IO.Pipes.NamedPipeServerStream("Bob") 然后什么? 解决方法我成功地使BULK INSERT(但不是BCP)在Windows 7和SQL Server 2008R2上与命名管道一起正常工作.有一些技巧.首先,我必须在两个不同的线程上创建两个命名管道实例,两个线程具有相同的管道名称. SQL Server将打开第一个实例,从中读取几个字节并关闭它,导致WriteFile在第一个线程中引发PipeException.然后,SQL Server将立即重新打开命名管道,并从中传输所有数据.如果我没有第二个线程在后台准备好提供数据,SQL服务器将在我的第一个线程有时间从PipeException恢复之前返回错误. 其次,我必须在一次调用WriteFile时编写所有数据.我从一个循环开始,我在管道中写了多个批次,但是BULK INSERT只使用了我写的第一批.它似乎执行非阻塞读取,并将任何返回零字节的读取视为文件结尾. 第三,必须将XML格式文件(如果使用)写入常规文件.我没有成功让SQL Server从管道读取格式文件.我不知道它是否可以从管道中读取非XML格式的文件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |