【问题标题】:SQL Server export stored procedure results to CSV file keeping char(9) formatSQL Server 将存储过程结果导出为 CSV 文件,保持 char(9) 格式
【发布时间】:2013-02-01 21:52:55
【问题描述】:

我在将存储过程的结果导出到 csv 文件并将结果保存为 9 个字符的字符串时遇到问题。存储过程的结果是一个简单的单列输出,在 SSMS 中执行时看起来很好,但 csv 中具有前导零的返回值在返回时没有零。表格列的类型为varchar(13),我进行了转换以尝试保持前导零不被丢弃,但没有运气。

这是存储过程:

SELECT DISTINCT
convert(char(8),n.NIIN)
FROM IMMS_ELEC.dbo.NIINList n

这是我正在使用的简单 BCP 脚本:

DECLARE @string AS NVARCHAR(4000)
SELECT    @string = 'BCP "exec CPLINK_Dev.dbo.spSelectLOG_NiinDistinct"
QUERYOUT:\data.csv -c -T -t'
exec master.dbo.xp_cmdshell @string

【问题讨论】:

  • 尝试 SELECT DISTINCT '"'+convert(char(8),n.NIIN)+'"' FROM IMMS_ELEC.dbo.NIINList n。如果您在任一侧添加引号,CSV 应将其视为文本并保留前导零
  • 我试过了,但结果是一样的。
  • 您用什么程序打开 CSV?如果你用记事本打开它,那里有前导零吗? Excel 将通过将它们转换为数字来“帮助”您
  • @Sparky,如果我在记事本 ++ 中打开它,我会得到我期望的 9 个字符的输出。如果我在 Excel 中打开它,则会删除前导零。很有趣。
  • 这意味着问题不在于您的 SQL 输出,而在于 Excel。尝试在前面添加单引号,看看是否允许 Excel 将其视为文本...

标签: sql sql-server tsql stored-procedures


【解决方案1】:

Excel 喜欢认为它比您更了解如何格式化您的数据...这里有一个技巧,您可以使用它来超越它。打开一个新的电子表格,选择所有单元格并将类型更改为文本(从常规),然后从记事本(或 SSMS)复制数据,将其粘贴到 Excel 中,如果需要,使用文本到列... Excel 应该停止然后搞乱你的格式。

您也可以对从 Excel 导入数据执行相同的操作,但我发现第一个更有效,您也可以使用它直接从 SSMS 网格结果复制和粘贴。

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    相关资源
    最近更新 更多