Sql server 2012中有一个名为“proc1”的存储过程。我已经采用了过程脚本,然后实现了异常处理(Begin Try ... End Try Begin Catch ... End Catch)。
我将“Create procedure proc1”语句更改为“Alter procedure proc1”然后执行它。它成功完成但是当我尝试再次获得相同的过程脚本时。我找不到异常处理部分。代码看起来像旧的存储过程代码。
我想知道这是可能的。即使我没有权限,它也应该在“alter procedure proc1”编译期间返回错误消息。
答案 0 :(得分:0)
了解存储过程是数据库的一部分很重要。这意味着它们的行为与使用 DDL(数据定义语言)语句(例如表)定义的任何其他“正常”对象一样。因此:
CREATE PROCEDURE
/ALTER PROCEDURE
。因此,如果您用来更改过程的会话在一个事务中,而您从未提交该事务,那么更改将被回滚。如您所说,如果出现错误导致数据库完全拒绝您的更改,您在尝试执行时应该会收到一个明显的错误,并且不会进行更改。例如,如果 ALTER PROCEDURE
命令本身存在语法错误,您将在没有执行任何批处理的情况下收到错误消息。或者,如果您的过程主体引用了现有表中不存在的列,Transact-SQL 可能会选择验证该过程并拒绝更改(如果该表不存在,它会接受该更改并且只是在以下情况下无法运行该过程)尝试稍后执行它,因为 Transact-SQL 可以说与它本身不一致)。