【问题标题】:SSIS lost stored procedure metadataSSIS 丢失存储过程元数据
【发布时间】:2010-12-27 19:39:42
【问题描述】:

我们有一个 SSIS pkg,它在 OLEDB 源中运行存储过程并将输出写入文件。存储过程有一个条件,如果它是一周中的某一天,它不会做任何事情。当它确实产生数据时,它会通过几个临时表来生成最终数据(完全来自临时表);存储过程在开始时启用了 SET FMTONLY OFF,因此它可以将元数据发送到 SSIS。 (涉及的两台服务器是 Windows 2008 Server 上的 SQL Server 2008。)

昨晚(它不应该生成数据的日子是周日/周一,这是计划运行的周日晚上(它是更大作业的一部分,因此它会在父运行的任何时候运行)), pkg 开始抱怨它找不到存储过程的元数据。在 SQL Mgmt Studio 中直接在服务器上运行 proc 时,它不会返回任何行,也不会返回列标题。但是,我们的开发环境中完全相同的代码和数据不会这样做。它不返回任何数据(正确),但确实显示列标题(也正确),因此 pkg 的开发版本不会抱怨元数据。

我还尝试了在 proc 顶部的一段从未执行的代码中添加“虚拟”元数据的技巧(如果 1 = 0 begin select cast(null as varchar(10)) as column1 end),但这并没有做到。

我认为在生产与开发中必须存在某种设置差异,这不会将元数据缓存在生产中,但会使其保持在开发中。有人知道从哪里开始寻找吗?

【问题讨论】:

    标签: sql-server-2008 ssis


    【解决方案1】:

    我认为这不是 SSIS 问题,也不是元数据问题。您说过,在 Management Studio 中运行时,proc 在开发中返回一个空数据集(仅列标题),而在生产中什么都没有。这是您的问题,proc 可能不返回任何内容而不是空数据集,这就是 SSIS 抱怨元数据的原因。

    仔细检查您的 proc 和数据在生产和开发中是否完全相同。是否每个代码路径都返回一些东西(即,是否有什么东西会导致生产遇到一个根本不返回任何东西的代码路径)?

    【讨论】:

    • 您为我指明了正确的方向。存储的过程被设置为在周日和周一不继续,所以当它被周日的包启动时,它在过程中没有足够远来生成元数据,元数据完全由临时表创建。所以它“丢失”了元数据。我将一天继续或不检查转移到包本身,让它运行一次,现在它又快乐了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2013-12-30
    相关资源
    最近更新 更多