9

データベースには、アプリケーションによって自動的に生成された200Stored Proceduresがあります。テーブルが大幅に変更されたため、それらをすべてSql server 2008 R2削除して再生成したいと思います。

この質問は私の場合と非常に似ていますが、私の場合、すべての SP は sp_ で始まり、システム SP もsp_で始まるため、同じコードを使用するのは危険だと思います。

上記のリンクの解決策を信頼する必要がありますか? そうでない場合、より安全な解決策はありますか?

4

5 に答える 5

24

これが 1 回限りのタスクである場合は、オブジェクト エクスプローラーを開き、データベース > プログラミングを展開して、ストアド プロシージャ ノードを強調表示します。次に、オブジェクト エクスプローラーの詳細 (F7 だと思います) をオンにします。右側にリストが表示されます。ここでは複数選択できます。つまり、名前で並べ替えたり、sp_ で始まるすべてのプロシージャを選択したり、1 回のキーストロークでそれらをすべて削除したりできます。

これを繰り返し実行している場合は、次のようになります (手順がすべて dbo スキーマにあると仮定します)。

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'DROP PROCEDURE dbo.'
  + QUOTENAME(name) + ';
' FROM sys.procedures
WHERE name LIKE N'sp[_]%'
AND SCHEMA_NAME(schema_id) = N'dbo';

EXEC sp_executesql @sql;
于 2013-01-20T13:06:10.633 に答える
0

このHow to Drop All Stored Procedures in Your Databaseを見つけてテストしたところ、ストアドプロシージャフォルダーStoredProcedureの外に作成されました。

CREATE PROC UserStoredProcedure_Sample1
 AS
       SELECT 'SQL Server rocks'
  GO

CREATE PROC UserStoredProcedure_Sample2
 AS
     SELECT 'SQL Server rocks'
 GO

 SET NOCOUNT ON

  -- to do this we have to use EXEC instead of sp_executesql
 -- sp_executesql does not accept a DROP command in the SQL String
 DECLARE @UserStoredProcedure    VARCHAR(100)
 DECLARE @Command                    VARCHAR(100)

 DECLARE UserStoredProcedureCursor CURSOR SCROLL STATIC READ_ONLY FOR
 SELECT
     SPECIFIC_NAME
 FROM
    INFORMATION_SCHEMA.ROUTINES

  OPEN UserStoredProcedureCursor

FETCH NEXT FROM UserStoredProcedureCursor
 INTO @UserStoredProcedure
  WHILE (@@FETCH_STATUS = 0) BEGIN
        SET @Command = 'DROP PROCEDURE ' + @UserStoredProcedure

         -- display; visual check
         SELECT @Command

        -- when you are ready to execute, uncomment below
        EXEC (@Command)

        FETCH NEXT FROM UserStoredProcedureCursor
         INTO @UserStoredProcedure
  END


 CLOSE UserStoredProcedureCursor
 DEALLOCATE UserStoredProcedureCursor

   SET NOCOUNT OFF
于 2013-01-20T13:10:20.187 に答える
0
DECLARE @DeleteProcCommand NVARCHAR(500)

DECLARE Syntax_Cursor CURSOR
FOR
SELECT 'DROP PROCEDURE ' + p.NAME
FROM sys.procedures p

OPEN Syntax_Cursor

FETCH NEXT FROM Syntax_Cursor

INTO @DeleteProcCommand

WHILE (@@FETCH_STATUS = 0)
BEGIN

EXEC (@DeleteProcCommand)

FETCH NEXT FROM Syntax_Cursor
INTO @DeleteProcCommand

END

CLOSE Syntax_Cursor

DEALLOCATE Syntax_Cursor
于 2013-08-21T11:25:19.567 に答える