【问题标题】:There is a data source column with no name in SSIS OLE DB Source taskSSIS OLE DB 源任务中有一个没有名称的数据源列
【发布时间】:2015-09-02 13:07:06
【问题描述】:

在我从 SSIS 中的数据流 OLE DB 源对象调用的 SP 的末尾,我有以下代码:

-- Get count from TEMP table #InactiveRules
SELECT @InactiveRulesCount = (SELECT COUNT(*) FROM #InactiveRules)

-- Define information sent in the email
IF @InactiveRulesCount = 0
    BEGIN
        SELECT @InactiveRulesMessage = ('No EXCEPTION KO Rules Found.');
        SELECT @Message = @InactiveRulesMessage;
        SELECT @Message;
    END
ELSE
    BEGIN
        SELECT * FROM #InactiveRules;
    END

当我执行数据流任务时,当我的变量 @InActiveRulesCount 中的计数为 0 时出现此错误:

如何创建数据源列,以便 TEXT 显示在我使用 SSIS 通过电子邮件以附件形式发送的 CSV 文件中?

任何帮助/指导将不胜感激。谢谢。

感谢您的帮助 MiguelH,这是代码:

-- Get count from TEMP table #InactiveRules
SELECT @InactiveRulesCount = (SELECT COUNT(*) FROM #InactiveRules)

-- Define information sent in the email
IF @InactiveRulesCount = 0
    BEGIN
        SELECT @InactiveRulesMessage = ('No EXCEPTION KO Rules Found.');
        SELECT @Message = @InactiveRulesMessage;
        SELECT @Message AS ProductName;
        SELECT @Message AS ChannelName;
        SELECT @Message AS StrategyCode;
        SELECT @Message AS StrategyName;
        SELECT @Message AS RuleCode;
        SELECT @Message AS RuleName;
        SELECT @Message AS [Priority];
        SELECT @Message AS IsActive;
        SELECT @Message AS [Message]; 
    END
ELSE
    BEGIN
        SELECT ProductName, ChannelName, StrategyCode, StrategyName, RuleCode, RuleName, [Priority], IsActive FROM #InactiveRules;
    END

【问题讨论】:

  • 该列在 IF count = 0 部分中没有名称。在选择的末尾添加别名。例如选择@MESSAGE 作为消息。
  • 谢谢,米格尔。但是,这产生了另一个错误:“组件“OLE DB Source”(1)”验证失败并返回验证状态“VS_NEEDSNEWMETADATA”。有什么建议么?再次感谢。
  • 您需要在 =0 部分和 select * 部分中使用相同的数据名称,否则将导致此错误,例如如果您的 SELECT * FROM #InactiveRules 有列“Rule,ID,Message”,那么这些需要在 =0 部分中镜像。基本上分配消息作为规则,消息作为 ID,消息作为消息。我已经在下面澄清了这一点!

标签: tsql ssis


【解决方案1】:
IF @InactiveRulesCount = 0
BEGIN
    SELECT @InactiveRulesMessage = ('No EXCEPTION KO Rules Found.');
    SELECT @Message = @InactiveRulesMessage;
    SELECT @Message as MyRule,@Message as myID,@Message as MyMessage
END
ELSE
BEGIN
    SELECT MyRule,myID,MyMessage FROM #InactiveRules;
END

【讨论】:

  • 我按照你上面所说的做了,SP 在 SQL Server 中执行,每个列名中都有相同的消息,但是当我执行具有该 SP 的 OLE DB 源的数据流任务时,我得到了一个错误说明:“组件“OLE DB Source”(1)”验证失败并返回验证状态“VS_NEEDSNEWMETADATA”。
  • 如果我检查了自己的代码会有所帮助!许多道歉。见上面的修正!此外,SSIS 非常挑剔,因此两组名称必须相同......包括字符的大小写。
  • NP。让我再试一次。我把上面的代码放在我原来的帖子里。谢谢。
  • 您可以使用任何您喜欢的值,但如果它们在成功的“SELECT”表中并非全部为 varchar,您可能需要 CAST 一些值,例如..SELECT @Message AS ProductName, cast('1' as integer) AS ChannelName,'x' AS StrategyCode, 'x' AS StrategyName,'x' AS RuleCode,'x' AS RuleName,'x' AS [优先级] , 'x' AS IsActive,'x' AS [消息];
  • 您可能还需要 CAST 与原始表长度相同的每个 varchar 数据项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多