【发布时间】:2019-11-22 13:36:20
【问题描述】:
上下文:我正在尝试通过 BCP 将 SQL Server 中表的内容输出到 CSV 文件。我正在尝试通过执行 UNION ALL 来明确命名 CSV 文件中的列标题,以便列标题不为空。
问题:有人可以分享一些关于我为什么会引发这些错误的指针,特别是当我在查询中明确转换数据类型时的数据类型转换错误?
bcp "select 'col1', 'col2', 'col3' union all select cast(id as varchar(10)), name, cast(someinfo as varchar(28)) from Question1355876" queryout myTable.csv /SmyServer01 /c /t, -T
111
我遵循了上面建议的逻辑:export table to file with column headers (column names) using the bcp utility and SQL Server 2008
下面是一直失败的T-SQL sn-p:
exec master.dbo.xp_cmdshell 'bcp "SELECT ''cast(Company_ID as int)'', ''cast(MatterMark_URL as nvarchar(150))'', ''cast(Company_Name as nvarchar(100))'', ''cast(Domain as nvarchar(150))'' UNION ALL SELECT DISTINCT cast(id as int), cast(url as nvarchar(150)), cast(company_name as nvarchar(100)), cast(domain as nvarchar(150)) FROM ##jsonparsed" queryout C:\Users\ebarnes\etl_project\company_data.csv -c -T -t'
【问题讨论】:
-
您分享的示例显示如何包含标头,是正确的。这是一个很好的技术,但它假设所有数据类型都是兼容的。你的数据类型不是,所以你必须解决这个问题。请参阅下面的答案。此外,您使用 ''cast(Company_ID as int)'' 的原始标题语句永远不会被解释为强制转换函数,它只是作为一个大字符串一起读取。从语法上讲,它是无效的。
标签: sql-server tsql bcp