首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BCP复制失败--数据类型转换和列级别排序错误

BCP复制失败--数据类型转换和列级别排序错误
EN

Stack Overflow用户
提问于 2019-07-12 19:09:56
回答 4查看 1.2K关注 0票数 0

上下文:我正在尝试通过将Server中的表内容输出到CSV文件中。我试图通过执行UNION来显式地命名CSV文件中的列标题,这样列标题就不会为空。

问题:有人能分享一下为什么我要引发这些错误,特别是当我在查询中抛出数据类型时数据类型转换错误的一些提示吗?

代码语言:javascript
运行
复制
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

下面是不断失败的that代码段:

代码语言:javascript
运行
复制
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'

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-07-12 19:49:06

斯图对正在发生的事情是正确的,但是有些东西需要抛出,还有更多的需要补充。您所收到的错误是因为您在第二个查询中显式地强制转换了一个数据类型,所以SQL也尝试将第一个查询(隐式转换为varchar以启动,直到SQL在第二个查询中遇到强制转换)也转换为int。但是,第一次查询中第一列中的值不能转换为int..。它是一个varchar字符串“强制转换(Company_ID as Int)”。

您必须在联合中获得第一次和第二次查询才能获得类似的数据类型。您永远不会将字符串"cast(Company_ID as int)“转换为整数,我建议将第二个查询中的列转换为char/varchar数据类型。你要把数据发送到文本文件中,对吧?您使用了bcp的-c选项,所以只需让第二场比赛中的一切都成为第一场,而不是反之亦然。

代码语言:javascript
运行
复制
exec master.dbo.xp_cmdshell 'bcp "SELECT ''Company_ID'' UNION ALL SELECT DISTINCT cast(id as varchar( 12 ) ) FROM ##jsonparsed" queryout C:\Users\ebarnes\etl_project\company_data.csv -c -T -t'
票数 1
EN

Stack Overflow用户

发布于 2019-07-12 19:15:09

因为Company_ID中的一个值不是数字。就像头像。

试着一点也不投。

票数 0
EN

Stack Overflow用户

发布于 2019-07-12 19:49:39

请尝尝这个

代码语言:javascript
运行
复制
    exec master.dbo.xp_cmdshell 'bcp "SELECT DISTINCT cast(id as int) AS Company_ID, cast(url as nvarchar(150)) AS MatterMark_URL , cast(company_name as nvarchar(100)) AS Company_Name, cast(domain as nvarchar(150)) AS Domain FROM ##jsonparsed" queryout C:\Users\ebarnes\etl_project\company_data.csv -c -T -t'

如果此操作失败,则意味着您的全局临时表##jsonparsed具有无法转换的无效数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57012818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档