-2

データベース内の正確な場所がわからない特定の値を検索したい。SQLサーバーに特定の値のカラム名やテーブル名を返すクエリはありませんか? 123 のような列の値があると仮定しますが、123 がどのテーブルに属しているかはわかりませんし、その列名もわかりません。この値が含まれているテーブル名を検索するクエリを作成できますか? プロシージャではなくクエリが必要です!!!

4

1 に答える 1

0

これでうまくいくかもしれません。多くのテーブル/列がある場合、これにはかなり時間がかかることに注意してください。列を検索していない場合は(N)VARCHAR、それらのタイプをc.DATA_TYPE NOT IN(...句に追加することをお勧めします。または、探していない他のタイプ (FLOATまたは などDECIMAL)。

SET NOCOUNT ON;
DECLARE @value NVARCHAR(MAX)='123';
CREATE TABLE #found(table_name SYSNAME,column_name SYSNAME);
DECLARE @sql NVARCHAR(MAX)=(
    SELECT
        'INSERT INTO #found(table_name,column_name) ' +
        'SELECT TOP 1 '+
            'table_name='''+REPLACE(t.TABLE_NAME,'''','''''')+''','+
            'column_name='''+REPLACE(c.COLUMN_NAME,'''','''''')+''' '+
        'FROM '+
            QUOTENAME(t.TABLE_SCHEMA)+'.'+QUOTENAME(t.TABLE_NAME)+' '+
        'WHERE '+
            QUOTENAME(c.COLUMN_NAME)+'='''+REPLACE(@value,'''','''''')+''';'
    FROM
        INFORMATION_SCHEMA.TABLES AS t
        INNER JOIN INFORMATION_SCHEMA.COLUMNS AS c ON
            c.TABLE_SCHEMA=t.TABLE_SCHEMA AND
            c.TABLE_NAME=t.TABLE_NAME
    WHERE
        t.TABLE_TYPE='BASE TABLE' AND 
        c.DATA_TYPE NOT IN('BIT','NTEXT','TEXT','IMAGE','BINARY','VARBINARY','DATETIME','DATE','DATETIME2','TIME','SMALLDATETIME','DATETIMEOFFSET')
    FOR XML
        PATH('')
);

EXECUTE (@sql);
SELECT * FROM #found ORDER BY table_name,column_name;
DROP TABLE #found;
于 2016-11-08T07:59:58.770 に答える