派生列上的 SSIS 2012 VS_ISBROKEN

K09*_*K09 6 sql-server ssis ssis-2012 ssis-expressions

我已经将 VS2008 中内置的 SSIS 包转换为在 VS2010 中打开。

我有一个未通过验证的派生列组件。它在 VS2008 中运行良好。这是派生列中使用的表达式...

FINDSTRING(
    SecurityDescription,"\n",1) > 0   
    ? SUBSTRING(SecurityDescription, 1, 
                FINDSTRING(SecurityDescription,"\n",1) - 1)  
) : SecurityDescription
Run Code Online (Sandbox Code Playgroud)

以下是我运行包时的错误...

在此处输入图片说明

错误是:

[派生列 [36]] 错误:
尝试解析表达式
[FINDSTRING](#102,"\n",1) > 0 ? [SUBSTRING](#11898,1,[FINDSTRING](#11898,"\n",1) - 1) : #102”失败并返回错误代码 0xC00470A3。
无法解析表达式。它可能包含无效元素或格式不正确。也可能存在内存不足错误。

我已经仔细检查过,SecurityDescription是一个有效的列。如果我只是添加SecurityDescription. 不知道FINDSTRING代码有什么问题。

Had*_*adi 5

首先,你在:字符前有一个额外的括号,表达式是:

FINDSTRING(
SecurityDescription,"\n",1) > 0   
? SUBSTRING(SecurityDescription, 1, 
            FINDSTRING(SecurityDescription,"\n",1) - 1)  
 : SecurityDescription
Run Code Online (Sandbox Code Playgroud)

世系 ID 错误

“沿袭 ID 是数据流任务中使用的组件或转换的属性。它包含一个整数值,用作缓冲区指针。数据流任务中的每一列都将分配一个沿袭 ID。” 在这篇 Microsoft TechNet 文章中了解沿袭 ID

LINEAGE ID 错误意味着源元数据已更改,只需通过双击派生列转换并关闭它来重新验证源(连接和组件),然后检查列元数据(使用高级编辑器)。(注意双击包含错误的组件会提示修复)

或者您可以尝试删除派生列转换并再次添加它(如果以前的解决方案不起作用)

重新验证源列元数据也很好

分析异常

如果您查看抛出的异常,您会发现SecurityDescription在同一表达式中具有不同的谱系 ID,这是不正确的。

"[FINDSTRING](#102,"\n",1) > 0 ? [SUBSTRING](#11898,1,[FINDSTRING](#11898,"\n",1) - 1) : #102"

所以很明显元数据需要更新。

同样从错误屏幕截图来看,表达式似乎使用了SecurityDescriptionNoLineFeedsnot SecurityDescription

这些错误可能是在包升级过程中引起的

旁注:检查SecurityDescription未在不同组件中多次定义。(例如:Source.SecurityDescriptionScript.SecurityDescription

尝试删除派生列转换并重新创建它或添加一个新的派生列并删除旧的