Sql server 2008 SQLServer对象的定义';名称';自编译以来已发生更改

Sql server 2008 SQLServer对象的定义';名称';自编译以来已发生更改,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,在更新过程并执行它之后,我得到一个错误 对象“过程名称”的定义已更改 因为它是编译的 是否有此错误的修复方法?是否在一个窗口中更改过程,然后在另一个窗口中执行 另一个 是的,就是这样。我正在SSMS中更新它并执行 调用该过程的单独应用程序 您需要结束正在编辑过程的会话。只有在提交更改之前,这些更改才会在编辑会话中可见。我刚刚遇到了另一种可能发生这种情况的情况,我想我应该在这里提及,以防对其他人有所帮助 我有一个“更新后”触发器,其中我正在更新datetime[DateModified]列。我不希

在更新过程并执行它之后,我得到一个错误

对象“过程名称”的定义已更改 因为它是编译的


是否有此错误的修复方法?

是否在一个窗口中更改过程,然后在另一个窗口中执行 另一个


是的,就是这样。我正在SSMS中更新它并执行 调用该过程的单独应用程序


您需要结束正在编辑过程的会话。只有在提交更改之前,这些更改才会在编辑会话中可见。

我刚刚遇到了另一种可能发生这种情况的情况,我想我应该在这里提及,以防对其他人有所帮助

我有一个“更新后”触发器,其中我正在更新datetime[DateModified]列。我不希望这个触发器触发同一个表上的其他触发器,所以我在触发器内执行此操作

disable trigger all on [MyTable];
当然,我忽略的是,这也禁用了当前正在运行的触发器,并导致错误

The definition of object 'MyTrigger' has changed since it was compiled.

解决方案是显式列出需要禁用的触发器,而不是使用“全部”。

对象名是什么类型的对象,它与正在执行的过程有什么关系?对象名指的是过程名。我会更新主要帖子来反映这一点。关于关系;我正在更新的过程也在执行。您是否在一个窗口中更改该过程,然后在另一个窗口中执行它?是的,就是这种情况。我正在SSMS中更新它,并执行一个单独的应用程序来调用该过程。还有一种情况,SP在同一连接会话中保留在内存中,但您更改了目标DBs。对于SP,DBs需要具有相同的构建,因此您需要确保,如果您在SP上更改了某些内容,则需要在连接会话中使用的所有DBs上部署“新”版本。