2011-10-19 16 views
0

Select_Customerという名前のストアドプロシージャが1つ欠けていました。私は同じデータベースの多くのバージョンを持っている、私は実際にどこの手順を覚えていない。オブジェクトを見つけるために複数のデータベースを検索するにはどうすればよいですか?複数のデータベースで検索

答えて

1

ストアドプロシージャsp_databasesは、サーバー内のすべてのデータベースを一覧表示します。実行中:

CREATE TABLE #d (
    DATABASE_NAME VARCHAR(255), 
    DATABASE_SIZE INT, REMARKS NVARCHAR(MAX) 
) 

INSERT INTO #d EXEC sp_databases 

すべてのデータベース名を含む表が表示されます。

テーブル[DATABASE NAME].sys.proceduresには、データベース内のすべてのストアドプロシージャのリストが含まれています。

したがって、サーバー内のすべてのデータベースを一覧表示するカーソルを開いてから、動的SQLを使用して、各データベースの名前でストアドプロシージャを検索する必要があります。うまくいけば、詳細を記入することができます:)

OK;あなたの詳細を記入しました

IF OBJECT_ID('[FindStoredProcOnServer]') IS NOT NULL 
    DROP PROCEDURE [FindStoredProcOnServer] 
GO 

CREATE PROCEDURE [FindStoredProcOnServer] 
    @storedProcName VARCHAR(255), 
    @databaseName VARCHAR(255) OUTPUT, 
    @debug   BIT = 0 
AS 
BEGIN 
    DECLARE @err   BIT 
    DECLARE @sql   NVARCHAR(MAX) 
    DECLARE @params   NVARCHAR(MAX) 
    DECLARE @exists   BIT 

    CREATE TABLE #output (DATABASE_NAME VARCHAR(255)) 

    CREATE TABLE #d (
     DATABASE_NAME VARCHAR(255), 
     DATABASE_SIZE INT, 
     REMARKS NVARCHAR(MAX) 
    ) 

    INSERT INTO #d EXEC sp_databases 

    DECLARE dbCursor CURSOR FOR SELECT DATABASE_NAME FROM #d 

    OPEN dbCursor 

    SET @params = '@exists BIT OUTPUT' 

    FETCH NEXT FROM dbCursor INTO @databaseName 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SET @sql = ' 
SELECT 
    @exists = COUNT(*) 
FROM 
    [' + @databaseName + '].sys.procedures 
WHERE 
    Name = ''' + @storedProcName + '''' 

     IF @debug = 1 PRINT @sql 

     EXEC sp_executesql 
      @sql = @sql, 
      @params = @params, 
      @exists = @exists OUTPUT 

     SET @err = @@ERROR 
     IF ISNULL(@err, 0) != 0 GOTO ERROR_HANDLER 

     IF @exists = 1 INSERT INTO #output VALUES (@databaseName) 

     FETCH NEXT FROM dbCursor INTO @databaseName 
    END 

ERROR_HANDLER: 
    CLOSE dbCursor 
    DEALLOCATE dbCursor 

    IF ISNULL(@err, 0) != 0 
     RAISERROR('--- Ending [FindStoredProcOnServer]: Failed', 16, 1) 
    ELSE 
     SELECT * FROM #output 

    RETURN ISNULL(@err, 0) 
END 
関連する問題