3

データベース内のすべてのテーブルから見つけようとしている特定の値を持つ列を検索する方法はありますか? たとえば、私は

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
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 '%VersionID%'
ORDER BY schema_name, table_name; 

検索して見つけたもの。「versionID」列が存在するテーブル名が表示されますが、たとえばその列の値が「35」のテーブル名を検索するにはどうすればよいですか。

前もって感謝します、


申し訳ありませんが、リクエストが明確でない可能性があります。私の研究では何も見つからなかったため、これは SQL では実行できない可能性があります。しかし、明確にさせてください。

このスクリプトの実行

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
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 '%factor%'
--and table_name in (Select name from sysobjects where ratingVersionID = 35)
ORDER BY schema_name, table_name; 

たとえば、これを返します。 クエリ結果

しかし、「AutoAge_Factor」テーブルの「factor」列には、「35」に一致するレコードがありません。そのテーブルが結果に返されないようにするにはどうすればよいですか。しかし、この戻り値をループとして使用し、ループ内で他のことをしたいので、結果の形式をこのようにすることを本当に好みます。

再度、感謝します!

4

3 に答える 3

2

このSQLへの変更により、実行できるSQLがさらに生成されます

SELECT 
    'select '''+SCHEMA_NAME(schema_id) +'.'+t.name + ''', '+c.name + ' from ' 
      + SCHEMA_NAME(schema_id) +'.' + t.name
      + ' where ' + c.name + ' = 35'

FROM sys.tables AS t 
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID 
WHERE c.name LIKE '%ID%' 
ORDER BY schema_name(schema_id), t.name

必要に応じて SQL を自動的に実行することもできますが、その構文はプラットフォームによって異なります。または、結果をクエリ ツールにコピーして実行します (それで十分な場合)。

于 2012-07-24T19:15:11.080 に答える
0

sys.columnsからs.name、c.nameを選択します。cinner join sys.tables s on s.object_id = c.object_id where c.name like'%35%'

これにより、35の列と関連するテーブルが表示されます。

于 2012-07-24T19:23:32.700 に答える
0

@tableName varchar(100)、@ colName varchar(100)を宣言します@sqlStatement nvarchar(100)を宣言します

sys.columnsからselects.name、c.nameのテーブルリストカーソルを宣言します。cinner join sys.tables s on s.object_id = c.object_id where c.name like'%YourSearchCondtion%' OPEN tablelist FETCH NEXT FROM tablelist into @tableName 、@ colName

@@ FETCH_STATUS = 0 BEGIN

SELECT @sqlStatement ='SELECT' + @colName +'、* FROM' + @tableName +'WHERE' + @colName +'NOT LIKE''%35%'''

exec sp_executesql @sqlStatement

--ここで、不要なテーブルを取得して一時テーブルに追加できます。PRINTCAST(@@ ROWCOUNT AS VARCHAR)

FETCH NEXT FROM tablelist INTO @ tableName、@ colName END

テーブルリストを閉じるテーブルリストの割り当てを解除するGO

于 2012-07-25T13:11:57.297 に答える