Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS中的Excel:当DT_NTEXT导致失败时,如何导入可能超过255个字符的列?_Excel_Ssis_Jet - Fatal编程技术网

SSIS中的Excel:当DT_NTEXT导致失败时,如何导入可能超过255个字符的列?

SSIS中的Excel:当DT_NTEXT导致失败时,如何导入可能超过255个字符的列?,excel,ssis,jet,Excel,Ssis,Jet,好的,我的最新项目需要将Excel 2007电子表格加载到SQL Server表中。我在SSIS 2008R2工作。基于我在互联网上找到的一些东西,我在高级编辑器中打开了Excel源代码,并将长列的数据类型更改为DT_NTEXT,这样它就不会截断它。然后我创建了数据库列VARCHAR(MAX)。这在我的笔记本电脑上以调试模式正确运行 然后我将其部署到开发服务器并尝试加载相同的测试文件。它失败,并显示以下错误消息: Error: Code: 0xC0208265 Source: Ma

好的,我的最新项目需要将Excel 2007电子表格加载到SQL Server表中。我在SSIS 2008R2工作。基于我在互联网上找到的一些东西,我在高级编辑器中打开了Excel源代码,并将长列的数据类型更改为DT_NTEXT,这样它就不会截断它。然后我创建了数据库列VARCHAR(MAX)。这在我的笔记本电脑上以调试模式正确运行

然后我将其部署到开发服务器并尝试加载相同的测试文件。它失败,并显示以下错误消息:

Error: Code: 0xC0208265
       Source: Main Data Flow Task Get Main Data [1]
       Description: Failed to retrieve long data for column "DESCR".
End Error
Error: Code: 0xC020901C
       Source: Main Data Flow Task Get Main Data [1]
       Description: There was an error with output column "DESCR" (72) on output "Excel Source Output" (9). The column status returned was: "DBSTATUS_UNAVAILABLE".
End Error
Error: Code: 0xC0209029
       Source: Main Data Flow Task Get Main Data [1]
       Description: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "output column "DESCR" (72)" failed because error code 0xC0209071 occurred, and the error row disposition on "output column "DESCR" (72)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
End Error
在搜索有关错误的信息时,我发现大约有一百万个网站提供了相同的三种建议解决方案:

  • 将“IMEX=1”添加到连接字符串的扩展属性中。
    它已经在那里了

  • 更改注册表中的TypeGuessRows键。
    这在服务器上设置为零,我理解这意味着它应该查看整个文件。尽管如此,我还是将其改为8以匹配我的笔记本电脑。我再次运行时也发生了相同的错误。然后我把它改为1763,这比电子表格中的行数还要多。它仍然给出了相同的错误。所以,我把它放回零。(在我的测试文件的第一行中有一个1900个字符的值,所以在本例中,它检查多少并不重要。)

  • 将源中的数据类型更改为DT_WSTR(4000)。
    这个专栏最多应该有10000个字符,所以我不确定这是否是一个好主意,即使它有效。不过,我还是试过了。这次它给了我一个截断错误。我将截断错误配置更改为“忽略失败”,它加载了数据,但将值截断为255个字符。我已经验证了长度是4000,并且在保存文件时没有更改,但是它仍然截断为255个字符

  • 我不知道还能看什么。任何帮助都将不胜感激


    更新1/29:软件包在预生产服务器上运行时,无任何更改,工作正常。在开发服务器上运行时仍然会失败。两台服务器具有相同版本的SSIS(包括次要版本号),以及相同版本的Windows、Access和Excel。我不知道如何解释这一点,也不知道如何判断它是否可以在生产中使用。

    我创建了一个具有类似非功能性需求的新包(Excel 2007文件、SSIS 2008、SQL Server 2008 R2、VARCHAR(MAX)目标列),它在部署到数据库服务器后运行良好。我的包裹:

  • Excel源组件输出的元数据(使用高级编辑器检查):DT\u NTEXT
  • 使用(DT_TEXT,1252)将源和目标之间的派生列组件从unicode转换为非unicode
  • OLE DB目标组件输入端的元数据(使用高级编辑器检查):DT_TEXT
  • 目标列数据类型:VARCHAR(最大值)
  • 我没有在连接中显式使用扩展属性IMEX

  • 通过右键单击数据库服务器上的包来执行,并将每个记录包含数千个字符的文件加载到表中,而不进行截断。希望这有帮助

    我在导入包含255个字符以上字段的excel文件时遇到了这个问题。我用Python解决了这个问题

    简单地说,在数据框中导入excel,然后计算每行每个字符串值的长度

    然后,按降序对数据帧进行排序。这将使SSIS能够在扫描前3行以分配存储时为该字段分配最大空间:

    df = pd.read_excel(f,sheet_name=0,skiprows = 1)
    df = df.drop(df.columns[[0]], axis = 1)
    df['length'] = df['Item Description'].str.len()
    df.sort_values('length', ascending=False, inplace=True)
    writer = ExcelWriter('Clean/Cleaned_'+f[5:])
    df.to_excel(writer,sheet_name='Billing',index=False)
    writer.save()
    

    嗯,我想我还没有试着从我的连接字符串中删除IMEX。除此之外,这听起来就像我的软件包的设置方式。当我到达办公室时,我将尝试删除IMEX。不,我仍然会收到没有IMEX规范的相同错误消息。您正在加载完全相同的文件吗?因为它实际上取决于文件中的数据。我相信您已经读过了,驱动程序将读取文件的开头,如果它认为数据类型不同,则会将其更改为较短的类型。简而言之,Excel很难一致加载。令人惊讶但却是真实的。您是否可以控制excel文件的生成方式?文本更可靠。嗨,你能解决这个问题吗?