2010-08-02 2 views

답변

33

마이크로 소프트는 지금처럼 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). 이것은 불쾌한 부작용을 피할뿐만 아니라 조금 더 빠릅니다.

+0

MS SQL 2012를 사용하고 있습니다.이 구문은 저에게 효과적입니다. DROP PROCEDURE [dbo]. [YourProcedure] –

2

: 도움이

IF EXISTS (SELECT name FROM sysobjects WHERE name = 'my_procedure' AND type = 'P') 
DROP PROCEDURE my_procedure GO 

희망!

5

시스템 테이블로 이동하지 않고 약간 간단한 방법 :

IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure 
GO 
-1

SQL SERVER 2008에서 방금 아래의 명령을 쓰기 저장 프로 시저를 삭제하려면 ....

DROP PROC Procedure_name 
DROP PROC dbo.spInsertUser 

그것을 희망 도와주세요 ..

관련 문제