Подтвердить что ты не робот

Отобразить все имена баз данных, содержащих определенную таблицу

У меня есть много баз данных на моем SQL Server.

Мне нужно просто искать имена баз данных, содержащие определенное имя таблицы Heartbitmaster

У меня есть много баз данных, таких как Gotgold, DVD и т.д., и я просто хочу найти имена баз данных из запроса, которые содержат эту таблицу Heartbitmaster.

Я искал, я попробовал для запроса:

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

но это не сработало.

Я искал дальше и наткнулся на:

SELECT name, database_id, create_date
FROM sys.databases 

но не знаю, как организовать дальше, где условие поиска имени таблицы

Пожалуйста, помогите мне.

4b9b3361

Ответ 1

Я сделал это через следующий запрос:

SELECT name FROM   sys.databases WHERE  CASE
  WHEN state_desc = 'ONLINE' 
  THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[heartbit]', 'U')
   END IS NOT NULL

Ответ 2

Мне нужно было что-то немного другое.

Это приведет к возврату всех таблиц и их соответствующих БД с именами, содержащими прилагаемую строку:

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

Ответ 3

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%tablename%'''

попробуйте этот

Ответ 4

Если вам нужно найти объекты базы данных (например, таблицы, столбцы, триггеры) по имени - посмотрите на инструмент БЕСПЛАТНО Red-Gate, называемый SQL Search, который делает это - он ищет всю вашу базу данных для любых строк (строк).

enter image description here

enter image description here

Это отличный инструмент для любого разработчика базы данных или базы данных - я уже упоминал об этом абсолютно БЕСПЛАТНО для использования любого вида использования

Что касается тегов INFORMATION_SCHEMA или SQL Server, то, насколько я знаю, они всегда привязаны к текущей базе данных, в которой вы находитесь, поэтому вы не можете искать все базы данных на своем сервере. SQL Search делает это для вас - путем поиска в каждой базе данных на сервере.

Ответ 5

Создайте процедуру ниже:

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'