【问题标题】:How to resolve "procedure has an unresolved reference to object dbo.sysssislog"如何解决“程序对对象 dbo.sysssislog 的引用未解决”
【发布时间】:2012-04-25 08:30:36
【问题描述】:

我有一个 Visual Studio 2010 数据库项目,并且我已经导入了一个现有架构。此数据库中有一些存储过程引用了 Integration Services 系统表 dbo.sysssislog,并在我的项目中生成了许多警告。

我尝试将 master.dbschema 和 msdb.dbschema 添加为数据库引用,并且我还尝试将引用的数据库名称重命名为 tempdb(而不是 master 或 msdb),但问题仍然存在。

我打开了 msdb.dbschema 文件,并确认文件中存在 sysssislog 表。

这里是警告:

SQL04151: Procedure: [dbo].[storedProcedureName] has an unresolved reference to object [dbo].[sysssislog].

【问题讨论】:

    标签: .net visual-studio-2010 sql-server-2008 database-project visual-studio-dbpro


    【解决方案1】:

    这是另一种更简洁的方法:

    创建一个新的空 SSDT 项目,将其命名为“sysssislog”并向其中添加 sysssislog 表的脚本。构建项目以生成 dacpac 文件“sysssislog.dacpac”。

    在您的 SSDT 项目中,为 dacpac 文件添加一个数据库引用,并在“添加数据库引用”对话框中选择“相同数据库”作为数据库位置。

    如果您的项目处于源代码管理之下,您可以将 dacpac 添加到项目中,然后添加引用,这样 dacpac 文件也处于源代码管理之下。

    【讨论】:

    • 我这样做了,这似乎可行,但(非常)奇怪的是,发布尝试创建表(因此脚本失败)。我相信这个功能(使用相同的数据库)允许您锁定数据库的各个部分,或者在数据库之间包含共享的源代码\表(例如审计或日志记录)
    【解决方案2】:

    dbo.sysssislog 是一个用户表(标记为系统表),由 SQL Server Integration Services (SSIS) 在您创建具有 SQL Server 类型的事件日志记录的包时自动创建。除了这个表,SSIS 还创建了一些存储过程(可以是ALTERed)来帮助记录过程。

    这是您项目中未解决的引用,可能是因为您导入了数据库架构,这导致导入了提到的存储过程,但没有导入 dbo.sysssislog 表,因为它被标记为系统表。

    所以现在,您拥有的是一堆引用您尚未导入的表的存储过程,从而导致警告。

    你可以做些什么来消除警告,是手动DROP 和 reCREATE 表(这是“删除”系统表标记的唯一方法),并将其导入到你的项目。

    【讨论】:

    • 将其创建为用户表不会使其行为有所不同吧?我只是想确保解决方案能够继续工作,并且我不必将其作为服务器上的系统表维护,而是作为源代码管理中的用户表维护。
    • 不,不会。我通常会更改表格以添加用于自定义日志记录的新列,并且这样做没有任何问题。
    • 很好,谢谢,尤其是关于删除/重新创建的提示很有帮助。
    猜你喜欢
    • 2021-01-22
    • 2014-05-22
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2019-08-31
    相关资源
    最近更新 更多