web-dev-qa-db-ja.com

特定のテーブルを含むデータベースのすべての名前を表示する

SQL Serverには多くのデータベースがあります。

特定のテーブル名を含むデータベース名を検索する必要がありますHeartbitmaster

GotgoldDVDなどの多くのデータベースがあり、このテーブル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 

しかし、テーブル名の検索の条件をさらに調整する方法を知らない

私を助けてください。

16
C Sharper

私は次のクエリでそれをやりました:

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

これを試して

7
Nithin

少し違うものが必要でした。

これは、指定された文字列を含む名前を持つすべてのテーブルとそれらに対応するDBを返します。

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

データベースオブジェクト(テーブル、列、トリガーなど)を名前で検索する必要がある場合-[〜#〜] free [〜#〜]これを行う SQL Search と呼ばれるRed-Gateツール-データベース全体であらゆる種類の文字列を検索します。

enter image description here

enter image description here

DBAやデータベース開発者にとっては必須のツールです-絶対に[〜#〜] free [〜#〜]であることは既に述べましたかあらゆる用途に使用しますか?

INFORMATION_SCHEMAまたはSQL Server固有のカタログビュー:私の知る限り、これらは常に現在のデータベースに制限されているため、サーバー上のすべてのデータベースを検索することはできません。 SQL Searchはこれを行います-サーバー上のすべてのデータベースを検索します。

2
marc_s

以下の手順を作成

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

できます!!!!!!!
特定のテーブルのデータベース名を見つけるためにこのクエリを実行します@tablenameのテーブル名の貼り付け

次回の実行のためにテーブル#tempoをドロップします

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 '''+@dbname+''' [Database],name from '+@dbname+'.sys.tables where name like ''%'+@tablename+'%'''
exec(@query)
set @n=@n+1;
end
select * from #tempo

最後のようなエラーを与える

データベース 'databasename'はオフラインのため開くことができません。

次に、このクエリを個別に実行します

select * from #tempo
0
Subodh Gaur