【问题标题】:BCP Export Automatically Converts Empty Strings to NULBCP 导出自动将空字符串转换为 NUL
【发布时间】:2012-06-15 12:30:29
【问题描述】:

所有,在这篇 xp_cmdshell Query Length Too Large 的帖子中,我设法解决了我在使用 xp_cmdshell 时遇到的查询大小限制问题。我写这么长的查询的原因是为了试图解决另一个问题,即 bcp 似乎将空字符串(来自包含空字符串字段的表)转换为一些编码字符('NUL' 或 'r',或者其他的东西)。这影响了我可以使用导出的数据的用途。我的导出查询是

string strBcp = String.Format(
    "declare @sql varchar(8000) " +
    "select @sql = 'bcp \"SELECT * FROM [{0}]..[ivwTmpDrgDataView];\" ' +" +
    "'queryout \"{1}\\DRGData.txt\" -c -t -T -S ' + @@servername " +
    "exec master..xp_cmdshell @sql;",
    strDatabase,
    strDataDir);

这工作正常,但在导出的文件数据库值被转换

NULL -> Empty String (Which is fine!)
Empty String -> Some strange character

我可以用 C# 读取 .txt 文件,然后重新编码 - 将我的“奇怪字符”转换回它应该是空字符串的最佳方法是什么?

感谢您的宝贵时间。

【问题讨论】:

    标签: c# encoding bcp xp-cmdshell


    【解决方案1】:

    BCP 将 NULL 转换为空字符串,因此请使用 NULL 而不是空字符串。

    More Description

    bcp utility

    【讨论】:

      【解决方案2】:

      这是设计使然,如果bcp 将空字符串和空字符串都转换为相同的输出(假设是一个空字符串),那么以后就无法消除它们的歧义了。

      【讨论】:

      • 那么将我的奇怪字符转换为空字符串的最佳方法是什么。那就是让bcp把空字符串写成空字符串?
      • 在输出查询中使用coalesceIsNull
      猜你喜欢
      • 2023-03-22
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2016-05-25
      • 2017-06-14
      • 2021-02-15
      相关资源
      最近更新 更多