我遇到了一些非常非常奇怪的事情。我使用object_definition(object_id('StoredProcedureName'))
之类的东西来获取存储过程的定义。但是,我注意到在我们的一些数据库中,输出是
Create Procedure dbo.SomeOtherStoredProcedure
这是一个问题,因为我使用object_definition来改变存储过程,当我尝试执行新查询时,它会说存储过程“SomeOtherStoredProcedure'不存在。
我知道我在使用object_id时没有指定对象类型,但是(如果我错了,请纠正我),因为返回的定义也是一个存储过程,我不认为&#这是问题所在。
我不知道有哪些object_definition
或object_id
的怪癖?什么可能导致这种情况?
(SQL Azure,SSMS 2012)
答案 0 :(得分:0)
正如Aaron所说,原因是 sp_rename 。正如MSDN says:
重命名存储过程,函数,视图或触发器不会更改sys.sql_modules目录视图的定义列中相应对象名称的名称
您可以从 sys.objects 获取更新的对象名称。通过摆弄字符串可以找到“真正的”定义:找到旧对象名称在损坏的定义中的位置,并用新的对象名称替换它。希望这很清楚。