很抱歉,如果这是一个noob问题,但我对vb并不是那么好,而且我整个星期都在搜索我的问题而没有找到解决方案。
我尝试使用SSIS将SQL Server 2008中的每周数据提取导出到Excel工作簿中的新(可变名称)工作表。
我当前的设置是一个脚本任务,它定义要写入的Excel工作表名称,然后是ODBC - > Excel转移。
这是我的脚本任务(每次都通过调试);
Public Sub Main()
Dim vars As Variables
Dts.VariableDispenser.LockOneForWrite("SheetName", vars)
vars(0).Value = "Week_" & DatePart(DateInterval.WeekOfYear, Today())
vars.Unlock()
Dts.TaskResult = ScriptResults.Success
End Sub
我的用户变量SheetName设置为Package-wide,其值设置为WeekNew。
我将包设置为以32位运行。 我已经将容器的整个内容的延迟验证设置为True。
我昨天在调试日志中收到了这些错误消息;
Error: 0xC0202009 at Create Data Extract, Create Extract [804]:
SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.
Error: 0xC02020E8 at Create Data Extract, Create DQ Extract [804]:
Opening a rowset for "Week_30" failed. Check that the object exists in the database.
Error: 0xC004701A at Create Data Extract, SSIS.Pipeline: component "Create Extract" (804) failed the pre-execute phase and returned error code 0xC02020E8.
我无法记住我昨天所做的更改,但现在当它到达导出的Excel目标部分时,我从调试日志中获得以下内容;
Error: 0xC0202009 at Create Data Extract, Excel Destination [1045]: SSIS Error Code
DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80040E37.
Error: 0xC02020E8 at Create Data Extract, Excel Destination [1045]: Opening a rowset for "Week_30" failed. Check that the object exists in the database.
Error: 0xC004701A at Create Data Extract, SSIS.Pipeline: component "Excel Destination" (1045) failed the pre-execute phase and returned error code 0xC02020E8.
我真的不知道如何解决这个问题,它开始让我疯狂。任何人都可以给出任何建议都是惊人的,我现在已经超出了我的深度!
编辑:我已经尝试在excel文件中创建destiation并写入但仍然写入0行。
编辑:按照TMNT2014发布的教程,我收到了以下错误消息;
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 1 to variable "User::WeekKey" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 8 to variable "User::Ref_Number" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 9 to variable "User::Ref_Number_2" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 10 to variable "User::Ref_Number3" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 11 to variable "User::Ref_Number4" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 13 to variable "User::Status1" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 14 to variable "User::Status2" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 22 to variable "User::Region" cannot be applied.
Error: 0xC001C012 at Foreach Loop Container: ForEach Variable Mapping number 45 to variable "User::Date" cannot be applied.
我的数据集中有45个字段,这些是我收到的唯一错误,并且没有其他信息。我已经在线查看过,并且没有发现任何其他人只是得到变量映射错误(它总是与其他东西一起)并且没有人使用Rafael'示例数据。我只能假设它与我的数据的源格式有关。
我将所有45个变量设置为String,create table语句将每个字段创建为Varchar,并且我在导出中具有从Unicode字符串到非unicode字符串的数据转换(因为否则在转换时失败)。有什么想法吗?
答案 0 :(得分:0)
以下是我使用过的配置(它有效,我已经检查了!)
在序列容器中: vb.net脚本任务
Public Sub Main()
Dim vars As Variables
Dts.VariableDispenser.LockOneForWrite("SheetName", vars)
vars(0).Value = "Week_" & DatePart(DateInterval.WeekOfYear, Today())&"$"
vars.Unlock()
Dts.TaskResult = ScriptResults.Success
入口点=主要 没有变数
然后是数据流任务 由。组成 OLEDB源 - 表或视图 数据转换 - 非Unicode到Unicode Excel目标 - 表名称或工作表变量(User :: SheetName)
我在包中的变量是: CreateSheetStatement - 非常确定不会再使用它,但请保留以防我将来需要它。 由于数据敏感性,我已经将Create table语句取出,但是你得到了jist
"CREATE TABLE `"+ @[User::SheetName] + "`(ENTER CREATE TABLE STATEMENT HERE)"
<强> SHEETNAME 强>
(DT_WSTR,5)"Week_" + (DT_STR,2,1252)DATEPART("week", getdate() )+"$"
<强> XLFileRootDir 强> 这个用于在excel连接管理器
中定义变量文件名末尾的日期戳在Excel中,我已经为每个周密钥创建了选项卡,并在每个选项卡上定义了与选项卡名称相关的命名范围(因此,选项卡Week_01具有我的数据着陆的命名范围,其中称为Week_01)
感谢您对TMNT2014的所有帮助! :)