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.
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
sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%tablename%'''
essaye celui-là
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>';
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.
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.
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'