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
If statement SSIS派生的前导零列填充_If Statement_Ssis_Expression_Padding_Ternary Operator - Fatal编程技术网

If statement SSIS派生的前导零列填充

If statement SSIS派生的前导零列填充,if-statement,ssis,expression,padding,ternary-operator,If Statement,Ssis,Expression,Padding,Ternary Operator,我希望能够在以下场景中添加前导零- 如果[ACCOUNT ID]

我希望能够在以下场景中添加前导零-

  • 如果[ACCOUNT ID]<17{For APPLICATION=RCC,SEC,HOGAN CIS},我需要在[ACCOUNT ID]前面加前导零

  • 如果([ACCOUNT ID]+[ACCOUNT NUMBER])<17{For APPLICATION=CLN},我需要在[ACCOUNT ID]之前加前导零

  • 如果([CLIENT KEY]+[CLIENT ID])<17{For APPLICATION=ITF},我需要在[CLIENT KEY]之前加前导零

  • 我在派生列中定义了以下表达式-

     LTRIM(RTRIM(APPLICATION == "RCC" || APPLICATION == "SEC" ? APPLICATION + "|" + [ACCOUNT ID] : APPLICATION == "HOGAN CIS" ? (HOGAN_Hogan_Alpha_Product_Code == "DDA" ? "DDA" : "TDA") + "|" + [ACCOUNT ID] : APPLICATION == "ITF" ? APPLICATION + "|" + [CLIENT KEY] + [CLIENT ID] : APPLICATION == "CLN" ? APPLICATION + "|" + [ACCOUNT ID] + [ACCOUNT NUMBER] : APPLICATION + "|" + [ACCOUNT NUMBER]))
    
    填充字符串 我在处理添加前导字符时使用的一般策略是始终添加它们,然后取最右边的N个字符。我发现这大大简化了你的逻辑

    RIGHT(REPLICATE('0', 17) + [MyColumn], 17)
    
    这将生成17个零,将其前置到我的列中,然后切掉最后17个字符。如果MyColumn已经是17个字符,那么就没有进行有效的工作。如果它是空的,那么现在的值是17个零

    选择 在您的例子中,我首先尝试添加一个派生列,以确定这个
    应用程序属于哪个逻辑块。很像现有的三元表达式

    (APPLICATION == "CLN") ? 10 : 
        (APPLICATION == "ITF") ? 20 :
        (APPLICATION == "RCC" | APPLICATION == "SEC" ....) ? 30 : 40
    
    从该派生列中,您将能够验证逻辑是否按预期工作,从而使填充更加容易。

    padding strings 我在处理添加前导字符时使用的一般策略是始终添加它们,然后取最右边的N个字符。我发现这大大简化了你的逻辑

    RIGHT(REPLICATE('0', 17) + [MyColumn], 17)
    
    这将生成17个零,将其前置到我的列中,然后切掉最后17个字符。如果MyColumn已经是17个字符,那么就没有进行有效的工作。如果它是空的,那么现在的值是17个零

    选择 在您的例子中,我首先尝试添加一个派生列,以确定这个
    应用程序属于哪个逻辑块。很像现有的三元表达式

    (APPLICATION == "CLN") ? 10 : 
        (APPLICATION == "ITF") ? 20 :
        (APPLICATION == "RCC" | APPLICATION == "SEC" ....) ? 30 : 40
    

    从该派生列中,您将能够验证逻辑是否按预期工作,从而使填充变得更容易。

    谢谢@billinkc-我不能在表达式中立即实现正确的(复制('0',17)+[MyColumn],17)吗?有什么害处?该逻辑同样适用于所有应用程序——只是对于某些应用程序,如ITF,如果客户机密钥和客户机ID的组合小于17,则必须在客户机密钥之前进行填充。我不能实现类似RIGHT(REPLICATE('0',17)+[CLIENT KEY+CLIENT ID],17)这样的东西吗?你可以,但我主张打破这种做法的原因是为了将来的可维护性。SSIS中没有用于计算缺火表达式的工具,因此在一个表达式中执行的操作越少,就越容易在两个组件之间设置data viewer并查找哪里出了问题。在2012年,你也可以设置一个数据点击来捕获这个。好的,谢谢billinkc,让我试试这个,我会更新线程。下面的表达式给出了语法错误。LTRIM(RTRIM)(应用程序==“RCC”|应用程序==“SEC”?应用程序+“|”+权限(复制(“0”,17)+[帐户ID],17):应用程序==“HOGAN CIS”?(HOGAN_HOGAN_Alpha_产品代码==“DDA”?“DDA”:“TDA”)+“|”+权限(复制(“0”,17)+[帐户ID],17):应用程序==“ITF”?应用程序+“|”+权限(复制(“0”,17)+[客户端密钥]+[CLIENT ID],17):APPLICATION==“CLN”?APPLICATION+“|”+(RIGHT(REPLICATE(“0”,17)+[ACCOUNT ID]+[ACCOUNT NUMBER],17):APPLICATION+“|”+RIGHT(REPLICATE(“0”,17)+[ACCOUNT NUMBER],17)))谢谢@billinkc-我能不能实现RIGHT(REPLICATE('0',17)+[MyColumn],17)在我的表达式中立即?它的危害是什么?逻辑同样适用于所有应用程序-只是对于某些应用程序,如ITF,如果客户端密钥和客户端ID的组合小于17,则必须在客户端密钥之前进行填充。我不能实现类似于RIGHT的东西(复制('0',17)+[客户端密钥+客户端ID],17)你可以,但我主张打破这一点的原因是为了将来的可维护性。SSIS中没有用于评估缺火表达式的工具,因此在一个表达式中执行的操作越少,就越容易在两个组件之间设置数据查看器,并查找出了什么问题。2012年,你还可以设置一个数据点来捕获这一点。好的,谢谢billinkc,让我试试这个,我会更新线程。下面的表达式给出语法错误。LTRIM(RTRIM(APPLICATION==“RCC”| | APPLICATION==“SEC”?APPLICATION+“|”+RIGHT(REPLICATE(“0”,17)+[ACCOUNT ID],17):APPLICATION==“HOGAN CIS”?(HOGAN| HOGAN}Alpha}Product}Code==“DDA”;“DDA”:“TDA”)+“TDA”)+“RIGHT”(REPLICATE(“0”),17)+[ACCOUNT ID],17):APPLICATION==“ITF”?APPLICATION+“|”+RIGHT(REPLICATE(“0”,17)+[CLIENT KEY]+[CLIENT ID],17):APPLICATION==“CLN”?APPLICATION+“|”+(RIGHT(REPLICATE(“0”,17)+[ACCOUNT ID]+[ACCOUNT NUMBER],17):APPLICATION+“|”+RIGHT(REPLICATE(“0”,17)+[ACCOUNT NUMBER],17)))