特定のテーブルを含むデータベースのすべての名前を表示します -- sql フィールド と sql-server フィールド と database フィールド と sql-server-2008 フィールド 関連 問題

Display all the names of databases containing particular table












19
vote

問題

日本語

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

特定のテーブル名を問わずデータベース名を検索する必要があります。<コード> Heartbitmaster

Gotgold 、<コード> DVD など、多くのデータベースがあり、この表<コード> 99887665 を含むクエリからデータベース名を見つけたいだけです。 。

私は照会を試みた:

<事前> <コード> 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

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

私を助けてください。

英語

I have many databases in my SQL Server.

I have to just search for database names containg particular table name Heartbitmaster

I have many databases such as Gotgold, DVD, etc and I just want to find database names from query that contain this table Heartbitmaster.

I searched I tried for query:

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

but it didn't work.

I searched further and came across:

SELECT name, database_id, create_date FROM sys.databases  

but dont know how to arrange further where condition for search of table name

Please help me.

</div
           

回答リスト

37
 
vote
vote
ベストアンサー
 

次のクエリを通じて行われました:

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

I got it done through following query:

SELECT name FROM   sys.databases WHERE  CASE   WHEN state_desc = 'ONLINE'    THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[heartbit]', 'U')    END IS NOT NULL 
</div
 
 
         
         
8
 
vote
<事前> <コード> sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%tablename%'''

これを試してみてください

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

try this one

</div
 
 
3
 
vote

私は少し異なるものが必要でした。

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

<事前> <コード> SELECT TABLE_NAME, TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME like '%_<insert_name_here>';
 

I needed something slightly different.

This will return all tables and their corresponding DBs with names containing the supplied string:

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

名前のデータベースオブジェクト(テーブル、列、トリガーなど)を見つける必要がある場合 - SQL Search これを行います - データベース全体をあらゆる種類の文字列を検索します。 画像の説明を入力します。

ENTER IMART Description

それはDBAまたはデータベース開発者のための素晴らしい必需品のツールです - すでにそれは絶対に free を使用していますか??

INFORMATION_SCHEMA またはSQL Server固有のカタログビューの

は、私が知っている限りでは、あなたが現在のデータベースに常に制約されているので、あなたはあなたのすべてのデータベースを検索することはできません。サーバ。 SQL Searchこれはあなたのために - サーバー上のすべての単一のデータベースを検索することによって。

 

If you need to find database objects (e.g. tables, columns, triggers) by name - have a look at the FREE Red-Gate tool called SQL Search which does this - it searches your entire database for any kind of string(s).

enter image description here

enter image description here

It's a great must-have tool for any DBA or database developer - did I already mention it's absolutely FREE to use for any kind of use??

As for the INFORMATION_SCHEMA or the SQL Server specific catalog views: as far as I know, those are always constrained to the current database you're in - so you cannot search across all databases on your server. SQL Search does this for you - by searching into every single database on the server.

</div
 
 
   
   
1
 
vote

手順をBellow

<事前> <コード> 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'
 

Create Procedure as bellow

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' 
</div
 
 
 
 
0
 
vote

うまくいきます!!!!!!!
特定のテーブルのデータベース名を見つけるためにこのクエリを実行してください。 @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

 

It Works!!!!!!!
Run this query for finding database name for a particular table The paste table name in @tablename

Drop table #tempo for next time run

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 

At the last giving error like

Database 'databasename' cannot be opened because it is offline.

then run this query separately

select * from #tempo 
</div
 
 

関連する質問

3  Stringを含む文字列を渡すときのストアドプロシージャの構文エラー  ( Syntax error in stored procedure when passing string containing space ) 
List2 のように、 List1 をスペース区切り値で渡すときは、構文エラーがあります。 List3 の中央にスペースがない場合は、そのような構文エラーはありません。何が間違っているのか? 私はこのようにしてストアドプロシージャを呼び出します、 <事前...

3  MDXエラー:クエリオプティマイザがクエリプランであまりにも多くのサブキューブを生成しました  ( Mdx error query optimizer generated too many subcubes in the query plan ) 
巨大なMDXクエリを使用してSQL Server 2008でキューブに尋ねようとしています。 このクエリには、20を超える計算メンバーが含まれています(クエリで定義されています)。 各メンバーには、キューブ上のディメンションに対する制限が含まれています。必ずし...

0  誰かがこのSQL 08クエリを修正するのを手伝ってください。  ( Can someone please help me to correct this sql 08 query ) 
下記のSQL 08クエリを実行すると、TBRM_ARTLELE.ARTRITLEIDがAggregate関数またはGroup By句に含まれていないため無効であるというエラーが発生します。 問題が以下のものに関連していることを知っています。 真実とし...

1  SQL Server 2008データベース(コピーをロックして別のマシンに接続する方法)  ( Sql server 2008 database how to lock it from copying and attach it in another m ) 
私は誰にもコピーしたくないデータがデータベースを持っています。 今、他のユーザーがローカルマシンにアクセスできるのをどのように予防できますが、私が扱うときはいつでも、許可されています。 と別の問題考え方、誰かが.mdbファイルをコピーして別のマシンにそれを添...

28  データベースをコピーする最善の方法は何ですか?  ( What is the best way to copy a database ) 
データベースのコピーを作成したい場合は、常に新しい空のデータベースを作成してから、既存のデータベースのバックアップを復元します。しかし、これが本当に最小のエラーが発生しやすい、複雑で、これを行うための最も効率的な方法であるかどうか疑問に思いますか? ...

0  SQL Server 2008でC#から選択するWindows Server 2003では遅すぎます:(  ( Select from c sharp in sql server 2008 too slow in windows server 2003 ) 
私はC#がSQL Server 2008と柔らかく接続しました。Crystal Reportによって作成されたいくつかのレポートがあります。 Windows XPでソフトを実行し、SQL Serverが同じウィンドウにインストールされていると、それは非常に高速...

12  SQL Server 2008にFullTextをインストールする方法  ( How to install fulltext on sql server 2008 ) 
SQL Server 2008ボックスにFullTextをインストールしようとしています。 「プログラムと機能」、選択したSQL Server 2008に行き、今度はこのポップアップを選択してください。追加/修理または削除します。 追加をクリックして、SQL...

5  SQL Server 2005および2008が同じマシンにインストールされている理由は何らかの理由であるか。  ( Any reason to have sql server 2005 and 2008 installed on same machine ) 
新しい開発サーバーを設定していて、最新バージョンのSQL Server 2008 Expressをインストールします。 既存のSQL2005データベースは、変更なしで2008年と連携しますか? 同じサーバー上に両方のバージョンをインストールする理由がある場...

2  SSISでの障害パッケージとエラーメッセージの取得  ( Retrieving failing package and error message in ssis ) 
何かがうまくいかないときは、私の他のパッケージから呼び出すべき一般的なエラー処理パッケージを作りたいです。このエラー処理パッケージでは、どのタスクに失敗したか、失敗の理由がログに記録します。この情報を取得するにはどうすればいいですか? コントロールフローの障害...

0  SQL Serverで再帰データを取得します  ( Get recursive data with sql server ) 
再帰的なデータを取得しようとしています。 次のコードはすべての両親を上部に、そして子供たちに戻ります。 私はデータの親を取得したいです1 - 彼の子供たちは親2 - 彼の子供たちの子供たちの子供たち - 彼の子供たち。 どうやってこれを行いますか? <事前...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有