2012-02-24 7 views
3

私はSQL Server 2008でストアドプロシージャを作成しています。 SQL Server Management Studioを使用しているときは、アップデートを行うたびに、Programmabilityフォルダを手動で更新し、右クリックしてから削除してからOKをクリックする必要があります。また、ストアドプロシージャを削除するクエリを実行することもできます。SQL Serverで古いストアドプロシージャを自動的に削除

既存のストアドプロシージャがあるかどうかをチェックするコード(execコマンドではなく実際のストアドプロシージャコードから)を初めて実行するときにストアドプロシージャにドロップできる関数はありますか?DROP新しいコードで置き換えますか?

または、これはバージョン管理のために悪い考えですか?

+2

ストアドプロシージャを記述するときに['ALTER PROCEDURE'](http://msdn.microsoft.com/en-us/library/ms189762.aspx)構文を使用してみませんか? – Justin

答えて

6

プロシージャ・スクリプトの先頭に追加できます。 (ただ実際の値にownernameにし、PROCNAMEを交換してください。

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[OwnerName].[ProcName]') AND type in (N'P', N'PC')) 
DROP PROCEDURE [OwnerName].[ProcName] 
GO 

また、あなたがALTER PROCを書くことができますが、スクリプトは、後でそのかもしれないデータベースに展開するよう、あなたの仕事を保存している場合、これは問題になることがありあなたは常にSQLサーバーは、既存のプロシージャを右クリックしてあなたのためにこれを生成します。また、テンプレートエクスプローラはCtrl + Alt + Tを使用することができますScript Stored Procedure as -> DROP and CREATE to -> ...

を選択して持つことができ余談手順

を持っていませんドロップストアを使用するその後、ED手順テンプレート(以下デフォルト)とは、あなたが既存のストアドプロシージャを変更しない代わりにCREATEQuery -> Specify Values for Template Parameters

-- ======================================================= 
-- Drop Stored Procedure 
-- ======================================================= 

-- Drop stored procedure if it already exists 
IF EXISTS (
    SELECT * 
    FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE SPECIFIC_SCHEMA = N'<Schema_Name, sysname, Schema_Name>' 
    AND SPECIFIC_NAME = N'<Procedure_Name, sysname, Procedure_Name>' 
) 
    DROP PROCEDURE <Schema_Name, sysname, Schema_Name>.<Procedure_Name, sysname, Procedure_Name> 
GO 
4

使用ALTERを使用するには、再作成しドロップする必要はありません。

PRINT 'Creating stored procedure "sp_tbl_multipart_msg_part_move".' 
IF EXISTS (SELECT * FROM sysobjects WHERE id = object_id('sp_tbl_multipart_msg_part_add')) 
    DROP PROCEDURE dbo.sp_tbl_multipart_msg_part_move 
GO 
CREATE PROCEDURE dbo.sp_tbl_multipart_msg_part_move 
--SP Code Goes Here 
END 
GO 

は、その後、私はちょうどたびに全体のスクリプトを実行することができますし、それ:私は私のストアドプロシージャスクリプトを作成する場合

+2

alterは、procに付与した特定の権限も保持します。 – Vinnie

0

は、私は、多くの場合、以下の(私が見てきたバリエーション)のようなもので、各ストアドプロシージャの定義の前にそれらを再作成する前にprocsを削除します。

私はこれがあなたが意味するものだと思います。

1

existanceをチェックまず:

if exists(select * from sys.procedures where object_id = OBJECT_ID('dbo.procname')) 
    drop procedure dbo.procname 

しかしので、あなたがproceduteにすでに許可または拒否された権限を殺すことをやって - ドロップ/シナリオを作成を使用しないより良い方法を、しかし、NON-をチェックしますexistanceとalter

SQL Server 2008のManagement Studioで
if NOT exists(select * from sys.procedures where object_id = OBJECT_ID('dbo.procname')) 
    EXEC('CREATE PROC dbo.procname as') 
GO 
ALTER PROCEDURE dbo.procname 
... 
1

私は右のストアドプロシージャをクリックしてください - 選択したスクリプトストアドプロシージャをとして - ドロップを選択して作成する - 新しいクエリウィンドウエディタ。

既に述べたように我々はすでに我々の手順の全てにこのコードを持っている:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[Name].[spName]') AND type in (N'P', N'PC')) 
DROP PROCEDURE [Name].[spName] 
GO 

だから私は、私をピックアップして、コマンドツールバーからそれを実行し、クエリウィンドウの手順に変更を加えることができます変更。次に、ストアドプロシージャに行き、右クリックして実行します。リフレッシュまたは削除は必要ありません。

関連する問題