上下文:我正在尝试通过将Server中的表内容输出到CSV文件中。我试图通过执行UNION来显式地命名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
下面是不断失败的that代码段:
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'

发布于 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选项,所以只需让第二场比赛中的一切都成为第一场,而不是反之亦然。
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'发布于 2019-07-12 19:15:09
因为Company_ID中的一个值不是数字。就像头像。
试着一点也不投。
发布于 2019-07-12 19:49:39
请尝尝这个
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具有无法转换的无效数据。
https://stackoverflow.com/questions/57012818
复制相似问题