任务很简单:我希望使用2008 R2将所有Server数据库表导出到MySQL (或MySQL可以采取的任何其他格式,例如Excel、CSV)。
我尝试了以下几点:
在谷歌搜索的同时,数据导出也失败了,原因是有一些编码的数据长度无效。我的猜测是,一种不应该超过4000字节的编码类型是存储了超过4000字节的数据。
我在尝试导出到Excel时确认了这一点。它显示了以下错误:
错误0xc0204016: SSIS.Pipeline: "output列"Subject“(83)”的长度不是valid.,长度必须在0到4000之间。( Server导入和导出向导) HRESULT: 0xC0204016 (Microsoft.SqlServer.DTSPipelineWrap)异常
上面的错误显示在一些表上。这一点很明显,MySQL工作台实际上为未受影响的表导出数据,然后简单地为受影响的表创建表(不将数据导出给受影响的表)。
我如何解决这个问题并能够导出这些数据?(通过一个将更正所有具有此错误数据的表中的所有行的查询;或者完全更改所有具有此坏数据的表的所有行中的数据编码)。
我不能使用平面文件选项,因为我有很多表。我的中的导入/导出向导只允许一次在表上备份到平面文件。
当我试图将其中一个表导出到一个平面文件时,我会得到以下错误:
错误0xc00470d4:数据流任务1: 输入列"FederalGovSponsored“(225)上的代码页为1252,要求为65001。 ( Server导入和导出向导)错误0xc004706b:数据流任务1: ”组件“”目的- newflatfile_txt“(139)”验证失败和返回验证状态“VS_ISBROKEN "VS_ISBROKEN". ( Server导入和导出向导)错误0xc004700c:数据流任务1: 一个或多个组件验证失败。( Server导入和导出向导)
如何删除此错误?
我真的不使用Server,而是使用MySQL。数据库由不愿提供支持的其他人维护。
发布于 2016-03-06 17:10:22
这将适用于简单情况(例如,对象/列名或数据中没有时髦的Unicode字符)。
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'
EXEC master..xp_cmdshell ''bcp '
+ QUOTENAME(DB_NAME()) + '.'
+ QUOTENAME(s.name) + '.'
+ QUOTENAME(t.name)
+ ' out "C:\temp\x_' + s.name + N'_' + t.name + '.txt" -c ' -- may need -w/-N/-n
+ ' -S server\instance -Uusername -Ppassword'';'
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id];
PRINT @sql;
EXEC sys.sp_executesql @sql;如果不能使用xp_cmdshell,则只需输出bcp命令,并从任何服务器或工作站上的命令行窗口运行这些命令,其中(a)安装了server客户端工具,(b)可以连接到数据库服务器。因此,在数据库服务器上运行这个查询,然后将输出填充到一个批处理文件中,然后在任何地方运行该批处理文件。
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += N'PRINT ''bcp '
+ QUOTENAME(DB_NAME()) + '.'
+ QUOTENAME(s.name) + '.'
+ QUOTENAME(t.name)
+ ' out "C:\temp\x_' + s.name + N'_' + t.name + '.txt" -c ' -- may need -w/-N/-n
+ ' -S server\instance -Uusername -Ppassword'';'
FROM sys.tables AS t
INNER JOIN sys.schemas AS s
ON t.[schema_id] = s.[schema_id];
EXEC sys.sp_executesql @sql;这里有更多的文档(包括如何使用格式文件和使用Unicode数据):
https://dba.stackexchange.com/questions/131417
复制相似问题