これを試してコメントをフィードバックしてください。
要件は、すべてのデータベースから1つの特定のテーブルを見つけることでした。これは、時間がかかり、人為的なエラーが発生する可能性があるため、目視検査では不可能でした。彼女はシステムビューsys.tablesを知っていました。
上記のクエリの制限は、1つのデータベース内を検索するだけであり、ユーザーは手動でデータベースを変更してクエリを再実行する必要があります。私は、サーバー上のすべてのデータベースを調べ、名前に検索語を含むデータベース名、スキーマ名、およびテーブルを提供するクイックスクリプトに続いて書きました。
CREATE PROCEDURE usp_FindTableNameInAllDatabase
@TableName VARCHAR(256)
AS
DECLARE @DBName VARCHAR(256)
DECLARE @varSQL VARCHAR(512)
DECLARE @getDBName CURSOR
SET @getDBName = CURSOR FOR
SELECT name
FROM sys.databases
CREATE TABLE #TmpTable (DBName VARCHAR(256),
SchemaName VARCHAR(256),
TableName VARCHAR(256))
OPEN @getDBName
FETCH NEXT
FROM @getDBName INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @varSQL = 'USE ' + @DBName + ';
INSERT INTO #TmpTable
SELECT '''+ @DBName + ''' AS DBName,
SCHEMA_NAME(schema_id) AS SchemaName,
name AS TableName
FROM sys.tables
WHERE name LIKE ''%' + @TableName + '%'''
EXEC (@varSQL)
FETCH NEXT
FROM @getDBName INTO @DBName
END
CLOSE @getDBName
DEALLOCATE @getDBName
SELECT *
FROM #TmpTable
DROP TABLE #TmpTable
GO
EXEC usp_FindTableNameInAllDatabase 'Address'
GO