解决方法
微软推荐使用object_id()函数,就像这样:
IF EXISTS (select * from dbo.sysobjects where id = object_id(N'[dbo].[YourProcedure]') and OBJECTPROPERTY(id,N'IsProcedure') = 1) DROP PROCEDURE [dbo].[YourProcedure] GO
。
object_id()有助于解决所有者冲突。如果你这样做
SELECT name FROM sysobjects WHERE name =’my_procedure’
您可能会看到许多不同的程序,具有相同的名称 – 所有的不同的所有者。
但是,如果存在多个过程,SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]’)将只显示当前所有者/用户的一个。
仍然,始终指定对象所有者(默认为dbo)。这不仅避免了讨厌的副作用,还有一点快。