wake-up-neo.net

Zeigt alle Namen von Datenbanken an, die eine bestimmte Tabelle enthalten

Ich habe viele Datenbanken in meinem SQL Server.

Ich muss nur nach Datenbanknamen suchen, die einen bestimmten Tabellennamen enthalten. Heartbitmaster

Ich habe viele Datenbanken wie Gotgold, DVD usw. und ich möchte nur Datenbanknamen aus der Abfrage finden, die diese Tabelle Heartbitmaster enthalten.

Ich suchte ich suchte nach Abfrage:

SELECT 
    TABLE_NAME  
FROM 
    INFORMATION_SCHEMA.TABLES 
WHERE 
    TABLE_TYPE = 'base table'   
    AND table_schema = 'Heartbitmaster'

aber es hat nicht funktioniert.

Ich suchte weiter und stieß auf:

SELECT name, database_id, create_date
FROM sys.databases 

aber ich weiß nicht, wie ich die Bedingungen für die Suche nach Tabellennamen weiter anordnen soll

Bitte hilf mir.

15
C Sharper

Ich habe es durch folgende Abfrage gemacht:

SELECT name FROM   sys.databases WHERE  CASE
  WHEN state_desc = 'ONLINE' 
  THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[heartbit]', 'U')
   END IS NOT NULL
29
C Sharper
sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%tablename%'''

probier diese 

6
Nithin

Ich brauchte etwas anderes. 

Dadurch werden alle Tabellen und ihre entsprechenden DBs mit Namen zurückgegeben, die die angegebene Zeichenfolge enthalten:

SELECT TABLE_NAME, TABLE_SCHEMA 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME like '%_<insert_name_here>';
2
laus102

Wenn Sie Datenbankobjekte (z. B. Tabellen, Spalten, Trigger) anhand des Namens suchen müssen, werfen Sie einen Blick auf das FREE Red-Gate-Tool namens SQL Search , das die gesamte Datenbank durchsucht für jede Art von String (s).

enter image description here

enter image description here

Es ist ein großartiges Muss für jeden DBA- oder Datenbank-Entwickler. Habe ich bereits erwähnt, dass es absolut FREE ist, um für jede Art von Verwendung verwendet zu werden?

Was INFORMATION_SCHEMA oder die SQL Server-spezifischen Katalogsichten betrifft: Soweit ich weiß, sind diese immer auf die aktuelle Datenbank beschränkt, in der Sie sich befinden. Sie können also nicht alle Datenbanken auf Ihrem Server durchsuchen. SQL Search erledigt dies für Sie - indem Sie jede einzelne Datenbank auf dem Server durchsuchen.

2
marc_s

Verfahren wie unten beschrieben

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 

exec usp_FindTableNameInAllDatabase 'user'
1
Sagar Modi

Es klappt!!!!!!!
Führen Sie diese Abfrage aus, um den Datenbanknamen für eine bestimmte Tabelle zu finden. Der Name der Einfügetabelle in @ Tabellenname

Löschen Sie die Tabelle #tempo für die nächste Ausführung

declare @tablename varchar(max) = 'patient'
declare @count int = (select max(database_id) FROM   sys.databases)
declare @n int = 1
declare @dbname varchar(max)
declare @query nvarchar(max)
create table #tempo(Databasename varchar(max), tablename varchar(max))
while @n <= @count
begin
select @dbname = name from sys.databases where database_id = @n and service_broker_guid <> '00000000-0000-0000-0000-000000000000'
set @query = 'insert into #tempo(Databasename,tablename) select '''[email protected]+''' [Database],name from '[email protected]+'.sys.tables where name like ''%'[email protected]+'%'''
exec(@query)
set @[email protected]+1;
end
select * from #tempo

Beim letzten Fehler wie

Die Datenbank 'Datenbankname' kann nicht geöffnet werden, da sie offline ist.

führen Sie dann diese Abfrage separat aus

select * from #tempo
0
Subodh Gaur