Bitte versuchen Sie es und kommentieren Sie mit Kommentaren.
Die Anforderung bestand darin, eine bestimmte Tabelle aus der gesamten Datenbank herauszufinden. Dies war bei visueller Inspektion nicht möglich, da es viel Zeit in Anspruch nehmen konnte und menschliche Fehler möglich waren. Sie kannte die Systemansicht sys.tables.
SELECT *
FROM sys.Tables
WHERE name LIKE '%Address%'
Die Begrenzung der Abfrage oben erwähnt ist, dass es nur in einer Datenbank sucht und Benutzerdatenbank manuell und führen Sie die Abfrage über die Änderung wieder zu halten hat. Ich schrieb folgendes Schnellskript auf, das in die gesamte Datenbank auf dem Server schaut und den Datenbanknamen, den Schemanamen und die Tabelle mit dem gesuchten Wort in seinem Namen angibt.
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