用于在执行SQL任务中注释和退出行的SSIS映射

时间:2017-08-01 08:29:31

标签: sql visual-studio tsql ssis

在ssis中,我试图像这样添加评论/ *和另一边用* /添加另一个评论。

我在执行SQL任务中的SQL如下:

SELECT DType, COUNT(*) FROM (
    SELECT DType From  (Select Distinct DPoint, RNum From
    ECount  Where DType = 'STR' and Month(EDate) = '07') as rows 
    UNION ALL
    SELECT DType From  (Select Distinct DPoint, RNum From
    ECount  Where DType = 'NCD' and Month(EDate) = '07') as rows
)
GROUP BY DType
ORDER BY DType

参数是一个字符串,每个参数分别有/ *和* /。我已将其映射为ssis映射为0和1,并使用ssis中指定的参数和数据类型为nvarchar。但是我有一个错误如下:错误:数据类型" DT_WSTR"和" DT_I4"与二元运算符不兼容。

但是参数是一个字符串,ssis中的映射设置为nvarchar。这可以完成吗或SSIS只能理解Select,WHERE子句等中的实际参数吗?

2 个答案:

答案 0 :(得分:0)

我真的不认为您可以使用SSIS参数动态注释掉代码或进行查询"动态"以任何其他方式。我认为他们只能做TSQL中的变量才能做...表示值。

如果是这种情况,那么这是一个简单的解决方法。如果您想要在AND之后注释掉这些内容,则只有一个参数为1;如果您不想将其注释掉,则为0,并执行以下操作:

...
WHERE CUSTOMER_ADDRESS.AddressNumber = 1
AND CUSTOMER_ADDRESS.ObjectTypeCode = 'ContactBase'
AND (
  1=? OR
    (
      CONTACT.CreatedOn BETWEEN   DATEADD(dd, DATEDIFF(dd,66,getdate()), 0) AND  DATEADD(dd, DATEDIFF(dd,0,getdate()), 1)
       or
      CONTACT.ModifiedOn BETWEEN   DATEADD(dd, DATEDIFF(dd,66,getdate()), 0) AND  DATEADD(dd, DATEDIFF(dd,0,getdate()), 1)
    )
) 

答案 1 :(得分:0)

您可以使用在运行时评估的变量来使用动态SQL。方法如下:

  • 使用属性EvaluateAsExpression=true创建一个字符串变量 SQLCommand ,并将其表达式设置为

    "<Your SQL Start> ... AND CUSTOMER_ADDRESS.ObjectTypeCode = 'ContactBase' " + 
    @[User::AdditionalCondition] + " <your SQL continued>"  
    
  • 创建一个字符串变量 AdditionalCondition ,并根据您的流量条件将其设置为NULL或值" AND <your condition> "

  • 在执行SQL任务时,将变量 SQLCommand 设置为命令源

后面的工作如下 - 包将根据您编程的逻辑在运行时设置 AdditionalCondition 变量。在Execute SQL Command中,包将评估 SQLCommand 变量,注入变量表达式中定义的 AdditionalCondition