2011-03-04 55 views
0

我有一个SQL DTS包在SQL Server 2005数据库上运行,这个数据库大部分工作正常。但是,有时它会失败,我不知道为什么。DTS - 完全限定表名称的问题

该软件包包含一个SQL任务,该任务创建一堆临时表,一堆数据转换,然后在另一个SQL任务结束时删除第一步中创建的临时表。

因为无法找到变换数据任务中引用的某个临时表,所以尽管表是第一步中创建的临时表之一,但程序包一次又一次地失败。

我在间歇性失败任务和所有其他转换数据任务之间唯一的差别是目标的表名属性 - 它是完全限定的,即完全限定。 MyDatabase.dbo.TempTable,而所有其他任务只是将表名指定为TempTable。我不知道为什么这个不同,或者如何解决这个问题。我认为这是问题,因为它是唯一一件看起来与这一项任务和所有其他任务不同的东西。

此外,如果我手动执行DTS的第一步以在完全执行程序包之前创建临时表,它始终有效。

任何人都可以告诉我什么问题可能在这里或如何我可以不符合目标表名称?

感谢

+0

您可以添加包失败时抛出的错误消息的详细信息吗? – 2011-03-04 16:47:03

+0

我刚刚关闭了Management Studio(本地时间!),但任务中的一个Transform Data任务失败,表示“CoreServices.dbo.TempBranchDivision”表无效,或无法找到,我可以不记得确切的措词。 – TabbyCool 2011-03-04 16:54:27

回答

0

我发现了什么问题!事实证明,失败任务的工作流属性不正确,并且没有将“创建临时表”任务指定为先决条件,因此在创建关联的目标表之前,现在每次都运行该任务。这并不经常发生,因为表格是第二个要创建的表格,所以在执行下一个任务之前通常会出现。所有其他任务都有正确的工作流程属性,但由于某种原因,这个任务已被错过。

1

你指的这个问题表作为临时表,但它看起来好像这是一个实际的表。我猜你打算在包裹中放下桌子?包失败后,你是否证实表存在?该表的语法是否正确?

另外,你现在在2005年。为什么不将软件包升级到SSIS? SSIS中的日志提供程序可以记录的不仅仅是错误消息,它可以帮助您了解真正的问题。

+0

如果要创建和删除表inteh进程,那么通过一切手段使用真正的临时表而不是临时表的黑客版本。 – HLGEM 2011-03-04 20:28:21

+0

你是对的,他们不是技术上的临时表。然而,我并没有创建这个软件包,也没有时间重写它,因为这是一个被搁置的项目,所以我的优先权在别处。如果我运行创建表的SQL任务,它会每次创建它们,但是当我运行整个DTS包时,它有时会说找不到一个特定的表。 – TabbyCool 2011-03-07 10:54:30

+0

另外,每个表的create table语法都是相同的,当然,除了表名以外,只有其中一个表的包失败,其他每个表都成功创建并且每次都填充。 – TabbyCool 2011-03-07 11:00:55

1

由于它间歇性地失败,它使用完全限定名称的事实不太可能成为问题。我怀疑问题在于它上面的某个步骤,因此表格永远不会被创建。或者这个表是使用select into语句而不是create table创建的?如果是这样,并且没有记录可以选择,这可能会导致这样的间歇性问题。

不同的人在不同的用户账户而不是工作下运行软件包吗?也许没有权限在该模式中创建表。

+0

该表使用创建表语句创建 - 如果手动运行包含创建表语句的任务,则每次都成功创建该表,但是当我运行整个程序包时,它有时会说该表不存在。我可以看到的唯一不同之处在于这个表和其他所有的表(其中包含大约20个任务,每个更新不同的表)是这样一个事实,即这个表使用完全限定的表名,而其他表。 – TabbyCool 2011-03-07 10:56:52

+0

活服务器上的作业每天在服务帐户下运行。它通常会成功,但是它一次又一次地在这张桌子上失败。我在我的本地SQL Server上运行它的问题完全相同,它只在一个表上失败,其他所有的都没问题。 – TabbyCool 2011-03-07 15:15:00

+0

更奇怪的是,如果每次都不会失败,那么我认为如果完全限定名称是问题,那么这种行为就是我所期望的。它是另一台服务器的完全限定名吗?如果是这样,可能连接到另一台服务器的时间是周期性的。 – HLGEM 2011-03-07 16:03:40

相关问题