36

タイトルが示すように、単純な質問:

最初に SP が存在することを確認して、SQL Server 2000 でストアド プロシージャ (SP) を削除する構文は何ですか?

完全なコードを提供してください。

4

6 に答える 6

60

Microsoft は、次の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)。これにより、厄介な副作用が回避されるだけでなく、少し高速になります。

于 2010-08-03T00:10:06.477 に答える
9

システムテーブルに行かない少し簡単な方法:

IF OBJECT_ID('my_procedure') IS NOT NULL DROP PROCEDURE my_procedure
GO
于 2013-09-18T13:31:48.500 に答える
9

SQL Server 2000 ではなく、SQL Server 2016 以降では、IF EXISTS 構文を使用できます。

DROP PROCEDURE IF EXISTS [sp_ProcName]
于 2019-12-03T22:33:23.660 に答える
3

このような:

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

それが役立つことを願っています!

于 2010-08-02T10:52:25.147 に答える
-2

SQL SERVER 2008で、ストアド プロシージャを削除したい場合は、以下のコマンドを記述してください....

DROP PROC Procedure_name
DROP PROC dbo.spInsertUser

それが役に立てば幸い..

于 2016-03-26T04:01:54.137 に答える