1. ホーム
  2. データベース
  3. mssql2005

SQL Server 2005のすべてのテーブルで、特定のカラムを検索する方法

2022-01-09 07:35:23

カラムの名前だけ知っていて、そのデータがどのテーブルにあるのか分からないことがあります。そこで、次の方法でカラムが含まれているテーブルを調べます。

コピーコード コードは以下の通りです。

Select O.name objectName, C.name ColumnName from sys.columns C inner join sys.objects O ON C.object_id=O.object_id where C.name like '%ColumnName%' order by O.name, C.name

実際の試用では、ColumnNameをチェックしたい列の名前に置き換えるだけです。

フィールドに文字列がある場合の検索用SQL文の書き方

問題の説明

よく遭遇する問題で、あるフィールドに含まれる文字列を検索し、それが文字列に含まれるフィールドであれば、それが

as sql="select * form tb where tb.name in(" & names & " )"。  

(注:nameはtbテーブルのフィールド、nameは取得した文字列、文は与えられた文字列名の中のフィールド名の全ての集合を問い合わせる)

この方法は当然紹介する必要はありませんが、私たちは通常、"他の方法"の問題に遭遇する、つまり、tb.nameテーブルフィールドの"名前"文字列は、たとえば、テーブルtbの名前フィールドの値は次のとおりです。張三、李斯、王呉、趙莉。

そして、テーブルのnameフィールドにクエリの条件が含まれているとき、つまり、"Zhang San"があるとき、つまり、クエリを満たしているときに決定されるname=张三をクエリしたいのです。

解決策

1. 最初に思いつくのはもちろんライククエリ(究極の解決策ではなく、究極の方法は以下に続く)です。

sql="select * form tb where tb.name like '%" & Zhang San & "%' "として。 

このステートメントは、名前フィールドに "Zhang San" を持つすべてのテーブルのセットを照会することができると説明します。張三;2つの単語は、明らかにまた、クエリを満たしているので、彼は自然にクエリされ、我々はちょうど"張三;ではなく、"秦張三八"、次のステップを参照してください。

2. Zhang San, Li Si, Wang Wu, Zhao Li" の代わりに、フィールドの値が ", Zhang San, Li Si, Wang Wu, Zhao Li," であった場合を想像してください。

何を見つけたのですか?

はい、文字列の前後に余分なカンマがあります。カンマは制限として使えるので便利です。もしこの時、"秦張三白"がフィールドにあれば、その前後にもカンマがあるので、カンマでクエリーを制御して正確に取得することが可能です

では、sql="select * form tb where tb.name like '%," & Zhang San & ",%' "のようにクエリを書き換えてください。

この時点で、原理と解決策はすべて決まりましたが、まだ次の問題が発生する可能性がありますので、手順3へ進みます。

3. このようにカンマがあるフィールドは、複数選択チェックを保存するときにチェックする値で、データベースに書き込むときに、異なるチェック値の後に自動的にカンマを追加することがあるんだ。

例えば、趣味を選択した場合、"本を読む (値=1)", "歌を聴く (値=21)",山に登る (値=13) " をチェックすることになります。

この時点で得られる値は xingquaihao="1, 21, 13" で、このフィールドをこの形式でデータベースに保存しますが、この時点で、上記のクエリを直接実行した場合

sql="select * form tb where xingquaihao like '%" & 1 & "%' " で、1がついたものをすべて取得します。たとえ、21、13の1でも、チェックアウトされます。

フィールドの前後にカンマを入れて ",1, 21, 13," となるようにし、21や13を調べる場合は次のように変更します。 sql="select * form tb where xingquaihao like '%," & 21 & ",%' " 結果は、何も見つかりませんでした。

値があるのは明らかなのに、なぜ見つからないのでしょうか?

フィールドは自動的にチェックされ、"1, 21, 13"のように途中にスペースを入れて保存されるため、1の後にカンマ、その後にスペース、そして21が続きます。

解決策は、チェックボックスをオンにした後、データベースに追加する前にスペースを削除することで、簡単に解決できます。

xingquaihao="1、21、13"。

xingquaihao=replace(xingquaihao," ","") 'スペースを削除します。

つまり、コンパクトな値を取得し、上記のクエリに従えば、完了です。