2017-07-13 5 views
0

検索アルゴリズムを使用して、特定の条件を満たすデータベースを検索しています。出力は次のようになります。参照の変数を使用して複数のテーブルから複数の列を検索することはできますか?

TableName  |  ColumnName 
--------------+--------------- 
Table1  |  Column1 
Table1  |  Column2 
Table1  |  Column3 
Table2  |  Column4 
Table2  |  Column1 
...   |  ... 
Table652  |  Column873 

私はどちらかを使用しようとしたところ、私はその後、別のクエリの入力としてそのテーブルを使用しよう:

WHERE Tablename.ColumnName LIKE 'Post 2013 - %' 

それとも

WHERE ((TableName).(ColumnName)) LIKE 'Post 2013 - %' 

または

SELECT ... 
CONCAT(TableName, '.', ColumnName) AS TabCol 
FROM search 
WHERE TabCol LIKE 'Post 2013 - %' 

問題はthです私のコードでは、これらのWHERE文のそれぞれでエラーが返されます。特定の値のテーブルをスキャンして値を見つけたTableNameとColumnNameを返す方法として、最初の出力を使用することは可能ですか?

+1

おそらく、動的SQLが必要です。 –

答えて

0

このようなことをするには、一般的に2つの方法があります。 1つは、データベース全体をテキストファイルに抽出し、検索するデータにテキスト検索ツールを使用することです。

もう1つは、システムテーブルを使用してすべてのタブ/フィールドを識別することです。次に、クエリを実行しているフィールドをいくつかのコード・ループで処理します。最初にデータ型をチェックして、日付、数値、または整数のデータ型を削除することができます。あるいは手動で行うこともできます。しかし、これを行うための標準的なSQLの方法として実際にはありません。

0

データベースとしてSQL Serverを使用している場合: - 動的クエリを使用できます。

あなたは、所望の結果が得られるテーブルデータを返すスクリーンショットと同様のロジックを持つストアドプロシージャまたは関数を書くことができます。 Tablename、Columnname、Conditionsをパラメータとして渡すことができます。テーブルのすべてのデータがあると仮定します。ここ

enter image description here

iが上記のシナリオと試みたサンプルクエリです。

select * from search; 
select * from table2; 
Declare @sql varchar(max) 
select @sql='select * from '+ tablename+' where '+columname+'='+'''john-her''' 
from search where tablename='table2' and columname='namedata2' 
select @sql 
exec(@sql) 

私はサンプルを試しました...条件付きのシナリオが複数ある可能性があります。これがあなたの問題を解決する方法をあなたに伝えるのを助けてくれることを願っています!

+0

少なくとも 'QUOTENAME(tablename)'と 'QUOTENAME(columname)'をお願いします。これらの変数に格納されている値がわからない場合。また、動的SQLに関しては 'sp_executesql'を見てください。 – Pred

+0

ええ、あなたはそれらを使用することができますが、私はすぐにサンプルを与えました。 DBMSがSQLサーバであるかどうかはわかりません。私はちょうど問題についてどうやって行くかについてのアイデアを伝えたいと思う。とにかくそれらのコメントのおかげで –

+0

することができます - >する必要があります。いくつかのSQLインジェクション攻撃を防ぐことで、コードをより安全にします。たとえメタデータを照会するだけであっても、クエリは構文解析なしで間違っている可能性があります。たとえば、テーブルの名前が 'transacton'や引用符で囲まれた予約語の場合。 – Pred

関連する問題