加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 可以从命名管道/ fifo读取Sql Server BULK INSERT

发布时间:2021-03-15 23:14:00 所属栏目:MsSql教程 来源:网络整理
导读:BULK INSERT / bcp是否可以从命名管道读取,fifo风格? 也就是说,不是从实际文本文件中读取,而是可以使BULK INSERT / bcp从另一个进程的写端上的命名管道中读取? 例如: 创建命名管道 将文件解压缩到命名管道 使用bcp或BULK INSERT从命名管道读取 要么: 创建

BULK INSERT / bcp是否可以从命名管道读取,fifo风格?

也就是说,不是从实际文本文件中读取,而是可以使BULK INSERT / bcp从另一个进程的写端上的命名管道中读取?

例如:

>创建命名管道
>将文件解压缩到命名管道
>使用bcp或BULK INSERT从命名管道读取

要么:

>创建4个命名管道
>将1个文件拆分为4个流,将每个流写入单独的命名管道
>从4个命名管道读取4个表w / bcp或BULK INSERT

我发现的最接近的是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格式的文件.

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读