代码之家  ›  专栏  ›  技术社区  ›  Rominus

bcp命令输出汉字而不是表格

  •  3
  • Rominus  · 技术社区  · 7 年前

    BCP ,使用运行一些处理 SQLCMD BCP公司 。它当前提供一个汉字字符串,而不是分隔的文本表。奇怪的是,它两天前还在工作,我什么也没改变。

    我已确认输入BCP和SQL Server处理步骤有效;保存输出数据的SQL Server表是正确的。我还试着使用 -C 根据建议指定代码页的选项 here ,没有变化。

    这是有问题的BCP代码。为了可读性,我将代码分成了几行,实际的代码通常在一行。它正在使用 union all 将列名放在文件的顶部。

    bcp 
    "select
        'MRN'
        ,'column name 2'
        ,[rest of the column names]
    union all 
    select distinct 
        iif(r.MRN is not null, cast(r.MRN as varchar), '') as MRN 
        ,[rest of the columns]
    from DATA_MANAGEMENT.dbo.Daily_inpat_out as d 
    left join DATA_MANAGEMENT.dbo.Roster_all_match as r 
        on d.Subscriber_ID = r.SUB_ID 
    where 
        r.MO_DLGTN_STA_DESC = 'DELEGATED'" 
    queryout "L:\Data_Management\Import_data\Daily_inpat\inpat_out_%mydate%_%mytime%.txt"
    -c -S [servername] -U [user] -P [password] -t "|"
    

    这是汉字输出的第一部分,整个字符串要长得多:

    前籎潇瑶偟潲牧浡䝼偒䥟籄䕍䉍剅也䵁籅䥂呒彈䅄䕔卼扵捳楲敢彲䑉呼彘䕓呔义彇䕄䍓
    

    2 回复  |  直到 7 年前
        1
  •  4
  •   Laughing Vergil    7 年前

    这是由于文本文件前面的字节同时排列造成的,这使记事本确信数据实际上是一个Unicode双字节文本文件。理论上,可以在那里放置一组字符,使解析器确信数据实际上是ASCII,但这会改变输出的格式。

    为了便于实施,您的最佳选择是:

    • 将数据输出为HTML,并使用浏览器进行查看

        2
  •  0
  •   F. Müller Dheeraj Singh    2 年前

    我也遇到了同样的问题(数据集之间也有联合),但我正在构建SQL语句

    就我而言,我选择了 '' as SomeField

    我改为 NULL as SomeField ,并将我的isnull检查更改为 ISNULL(field,char(32))

    SET @SQL = @SQL +'ISNULL('+@Cols+ ',CHAR(32))' + ' as '+@Cols+','
    

    bcp输出文件正确。

    我怀疑在上述情况下

    iif(r.MRN is not null, cast(r.MRN as varchar), '') as MRN

    iif(r.MRN is not null, cast(r.MRN as varchar), CHAR(32)) as MRN 会解决这个问题。