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