SQL object_definition返回不同的,不存在的对象的定义?

时间:2016-05-12 15:00:44

标签: sql sql-server azure stored-procedures

我遇到了一些非常非常奇怪的事情。我使用object_definition(object_id('StoredProcedureName'))之类的东西来获取存储过程的定义。但是,我注意到在我们的一些数据库中,输出是

Create Procedure dbo.SomeOtherStoredProcedure

这是一个问题,因为我使用object_definition来改变存储过程,当我尝试执行新查询时,它会说存储过程“SomeOtherStoredProcedure'不存在。

我知道我在使用object_id时没有指定对象类型,但是(如果我错了,请纠正我),因为返回的定义也是一个存储过程,我不认为&#这是问题所在。

我不知道有哪些object_definitionobject_id的怪癖?什么可能导致这种情况?

(SQL Azure,SSMS 2012)

1 个答案:

答案 0 :(得分:0)

正如Aaron所说,原因是 sp_rename 。正如MSDN says

  

重命名存储过程,函数,视图或触发器不会更改sys.sql_modules目录视图的定义列中相应对象名称的名称

您可以从 sys.objects 获取更新的对象名称。通过摆弄字符串可以找到“真正的”定义:找到旧对象名称在损坏的定义中的位置,并用新的对象名称替换它。希望这很清楚。