【问题标题】:BCP Export - Empty StringBCP 导出 - 空字符串
【发布时间】:2021-08-15 05:01:06
【问题描述】:

我有一个观点,我需要保持原样,因为它被到处调用。所以不能修改。 视图返回一些带有空字符串的列。

select col1, col2, col3, '' as col4, '' as col5 from myTable

这就是我启动 BCP 命令以将该视图导出到 csv 文件的方式。 @FileLocation@FileName 是预先设置好的。

declare @SQL varchar(8000)
set @SQL = 'select col1, col2, col3, '''' as col4, '''' as col5 from myTable'
set @SQL = 'bcp "' + @SQL + '" queryout "' + @FileLocation + @FileName + '" -c -t; -q -T"'
exec master..xp_cmdshell @SQL

文件创建没有问题,但 col4col5 在 Notepad++ 中显示为“NUL”。 如何修改我的 BCP 命令以导出空字符串?

【问题讨论】:

    标签: sql-server bcp


    【解决方案1】:

    bcp.exe 有一个奇怪的行为,会在 out/queryout 期间翻转 NULL''

    在提取数据时,bcp 实用程序将空字符串表示为 null,将空字符串表示为空字符串。

    参考号:bcp Utility - Arguments

    尝试使用以下查询:

    select col1, col2, col3, null as col4, null as col5 from myTable
    

    【讨论】:

    • 谢谢,是的。我知道。当我将列值设为 NULL 时,它将起作用。但是,正如我所说,我无法更改查询,因为它是一个全面使用的视图。
    • 我需要知道如何使用 bcp 命令。有一个“-k”参数,但我还没有弄清楚如何在这里使用它。
    • @Daniel 没有人说您必须更改视图。您将在 BCP 命令中用作源的查询更改为简单地将空字符串转换为 NULL - 类似于 SELECT ..., NULLIF(col4, '') AS col4, ... from myView(并注意您的示例使用“myTable” - 我们不要添加混淆)。由于您知道这些列是字符串常量,您可以忽略它们并用您自己的常量替换(有一定风险)。
    • 是的,我同意。这有点令人困惑。 select col1, col2, col3, null as col4, null as col5 from myTable 是视图的定义。这个定义在现实中要大得多——大约 100 列。所以当我在查询中调用我的视图时,我会使用select * from myView,因为写下每一列会很麻烦。无论如何,我的理解是否正确,我无法控制 BCP 命令中空字符串与 Null 的输出?如果是这种情况,我可能必须复制视图并将那些空字符串列更改为 Null 列,但我希望避免这种情况。
    • @Daniel 您可以选择 not 以使用 bcp.exe 执行此任务。您没有理由不能使用 PowerShell、C# 或任何其他支持 SQL 的外部进程来生成您的 ;-delimited 文件。
    【解决方案2】:

    看了所有的cmets,似乎没有办法完成我想要的。我最终复制了视图并以适用于bcp 的方式填充了空白字段。 非常烦人,但显然是唯一可行的选择。

    【讨论】:

      猜你喜欢
      • 2012-06-15
      • 2023-03-22
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      相关资源
      最近更新 更多