【问题标题】:Is it possible to use BCP In with named pipe in SQL Server 2008 R2?是否可以在 SQL Server 2008 R2 中将 BCP In 与命名管道一起使用?
【发布时间】:2015-07-08 13:27:05
【问题描述】:

我有一个输入 JSON 文件,我想将它加载到 SQL Server 表中。 目前我正在执行以下步骤:

1) 使用 JQ 实用程序将 JSON 文件转换为平面结构。 (http://stedolan.github.io/jq/)

2) 将 JQ 的输出存储到平面文件中

3) 使用 BCP 将平面文件加载到 SQL 表中

BCP Database.Schema.Table in "\\SharedDirectory\InputFileName.txt" -T -S "Server" -w -t ~ -r \n

是否可以跳过步骤 2)并使用 BCP 将 JQ 的输出直接加载到 SQL Server 表中? 我正在尝试运行以下命令:

JQCommand | BCP Database.Schema.Table in -T -S "Server" -w -t ~ -r \n

【问题讨论】:

    标签: sql-server sql-server-2008 bcp jq


    【解决方案1】:

    从我在MSDN 中看到的情况来看,BCP 似乎只接受文件作为输入。

    对于 Windows,有一个名为 con 的特殊文件可用于捕获标准输入(类似于 /dev/stdin)。尝试使用它。

    JQCommand | BCP Database.Schema.Table in con -T -S "Server" -w -t ~ -r \n
    

    【讨论】:

    • 嗨 Jeff,使用特殊文件 con 不起作用。我收到了这个错误:进程试图写入一个不存在的管道。
    【解决方案2】:

    是的,这是可能的 - 但管道必须标记为InOut。示例:

    var pipeId = $"bcp_{Guid.NewGuid():n}";
    Thread copyThread;
    using (var np = new NamedPipeServerStream(pipeId))
    {
        copyThread = new Thread(_1 =>
        {
            np.WaitForConnection();
    
            using (var dst = File.Create("out.txt"))
            {
                np.CopyTo(dst, 4096);
            }
        });
        copyThread.Start();
    
        var bcp = Process.Start(
            @"bcp.exe",
            $@"dbo.Table out \\.\pipe\{pipeId} -S Server -U sa -P password -w -t,");
        bcp.WaitForExit();
    }
    copyThread.Join();
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多