web-dev-qa-db-fra.com

Afficher tous les noms des bases contenant une table particulière

J'ai beaucoup de bases de données dans mon serveur SQL.

Je dois simplement rechercher des noms de base de données contenant un nom de table particulier Heartbitmaster

J'ai beaucoup de bases de données telles que Gotgold, DVD, etc. et je veux juste trouver les noms de bases de données à partir d'une requête contenant cette table Heartbitmaster.

J'ai cherché j'ai essayé la requête:

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

mais ça n'a pas marché.

J'ai cherché plus loin et suis tombé sur:

SELECT name, database_id, create_date
FROM sys.databases 

mais ne sais pas comment organiser plus loin où condition pour la recherche du nom de la table

Aidez-moi, s'il vous plaît.

15
C Sharper

Je l'ai fait par la requête suivante:

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%'''

essaye celui-là 

6
Nithin

J'avais besoin de quelque chose de légèrement différent. 

Cela renverra toutes les tables et leurs DB correspondants avec des noms contenant la chaîne fournie:

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

Si vous avez besoin de rechercher des objets de base de données (tables, colonnes, déclencheurs, par exemple), jetez un coup d'œil à l'outil FREE Red-Gate appelé Recherche SQL qui fait cela - il recherche dans toute votre base de données. pour tout type de chaîne.

enter image description here

enter image description here

C'est un excellent outil indispensable pour tout développeur de base de données ou d'administrateur de base de données - ai-je déjà mentionné qu'il est absolument GRATUIT à utiliser pour tout type d'utilisation?

En ce qui concerne les vues de catalogue INFORMATION_SCHEMA ou spécifiques à SQL Server: pour autant que je sache, elles sont toujours limitées à la base de données actuelle dans laquelle vous vous trouvez. Vous ne pouvez donc pas effectuer de recherche dans toutes les bases de données de votre serveur. SQL Search le fait pour vous - en effectuant une recherche dans toutes les bases de données du serveur.

2
marc_s

Créer une procédure comme ci-dessous

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