2010-08-02 40 views

Trả lời

33

Microsoft khuyến cáo sử dụng object_id() chức năng, như vậy:

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() giúp giải quyết xung đột của chủ sở hữu. Nếu bạn làm
SELECT name FROM sysobjects WHERE name = 'my_procedure' , bạn có thể thấy nhiều quy trình khác nhau có cùng tên - tất cả cho các chủ sở hữu khác nhau.

Nhưng, SELECT * FROM sysobjects WHERE id = object_id(N'[my_procedure]') sẽ chỉ hiển thị cho bạn chủ sở hữu/người dùng hiện tại nếu có nhiều thủ tục theo tên đó.

Tuy nhiên, luôn luôn chỉ định chủ sở hữu đối tượng (mặc định là dbo). Điều này không chỉ tránh những tác dụng phụ khó chịu mà còn nhanh hơn một chút.

+0

Tôi đang sử dụng MS SQL 2012, cú pháp này làm việc cho tôi DROP PROCEDURE [dbo]. [YourProcedure] –

2

Như thế này:

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

Hy vọng rằng sẽ giúp!

5

Một phương pháp đơn giản hơn một chút mà không đi đến bảng hệ thống:

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

Trong SQL SERVER 2008, nếu bạn muốn thả một thủ tục lưu trữ chỉ cần viết lệnh dưới đây ....

DROP PROC Procedure_name 
DROP PROC dbo.spInsertUser 

Hy vọng nó giúp ..

Các vấn đề liên quan