4

私はこのトピック (データベース内の不明なテーブルで特定の列を見つけますか? ) を認識しており、私の問題は非常に似ています。私が必要とするクエリは、これに非常に似ています(私は思う):

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%watcher%'

しかし、列名が不明なクエリが必要ですが、内容が何であるかはわかっているので、テーブル/列の名前を知りたいです。(私はこれが奇妙に聞こえることを知っています:-/ )。これは可能ですか?

4

6 に答える 6

6

ApexSQL Searchを試してみてください。オブジェクトとデータの両方を検索します。これは、Red Gate の SQL Search に似た無料のツールです。

サード パーティのツールを使用したくない場合の別のオプションは、カーソルを使用してすべてのテーブルのすべての列を反復処理するクエリですが、複雑すぎてパフォーマンスが集中しすぎることが懸念されます。

于 2013-04-29T08:50:32.870 に答える
4

わかりました、あなたの問題には動的SQLが必要になると思いますので、最初にこのリンクを見てください。それでも十分でない場合、頭に浮かんだ唯一の解決策はカーソルに関するものなので、問題の他の実装を探し続けることをお勧めします。とはいえ、次のコードを試すことができます (ただし、最初に小さなテーブルでテストする必要があります)。

DECLARE @Query NVARCHAR(MAX), @Column NVARCHAR(100), @Table NVARCHAR(100)
DECLARE @Search NVARCHAR(100)
SET @Search = 'Your string'

CREATE TABLE #Results(Table_Name VARCHAR(100), Column_Name VARCHAR(100))

DECLARE Col CURSOR FOR
SELECT Table_Name, Column_Name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLLATION_NAME IS NOT NULL
ORDER BY TABLE_NAME, ORDINAL_POSITION

OPEN Col
FETCH NEXT FROM Col INTO @Table, @Column
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @Query = 'IF EXISTS (SELECT * FROM '+QUOTENAME(@Table)+' WHERE '+QUOTENAME(@Column)+'='''+@Search+''')
                    SELECT '''+@Table+''','''+@Column+''''

    INSERT INTO #Results
    EXEC sp_executesql @Query
    FETCH NEXT FROM Col INTO @Table, @Column
END
CLOSE Col
DEALLOCATE Col

SELECT * FROM #Results
于 2011-04-28T13:59:14.580 に答える
2

これを行うSQL Searchと呼ばれる無料のRed-Gate ツールを見てください。データベース全体であらゆる種類の文字列を検索します。

ここに画像の説明を入力

ここに画像の説明を入力

これは、DBA やデータベース開発者にとって欠かすことのできない優れたツールです。

于 2011-04-28T12:59:38.150 に答える
1

SQL Workbench/Jを使用すると、次のステートメントを実行できます。

WbGrepData -searchValue=watcher

すべての (アクセス可能な) テーブルのすべての列を検索し、少なくとも 1 つの列で検索語が見つかったすべての行を返します。

于 2011-04-28T14:03:04.557 に答える
0

それも役立つかもしれません

DECLARE @columnName as varchar(100)
SET @columnName = 'ColumnName'

SELECT t.name AS Table, c.name AS Column,
ty.name AS Tipo, c.max_length AS Length
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE @columnName
ORDER BY t.name, c.name
于 2014-03-14T14:22:15.583 に答える
0
DB名を使用

行く

SELECT t.name AS table_name,

SCHEMA_NAME(schema_id) AS スキーマ名、
c.name AS column_name

FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID

WHERE c.name LIKE '%ColumName start from%'

ORDER BY スキーマ名、テーブル名;

于 2013-11-29T07:09:04.760 に答える