SQL Server 2005のすべてのテーブルで、特定のカラムを検索する方法
カラムの名前だけ知っていて、そのデータがどのテーブルにあるのか分からないことがあります。そこで、次の方法でカラムが含まれているテーブルを調べます。
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," ","") 'スペースを削除します。
つまり、コンパクトな値を取得し、上記のクエリに従えば、完了です。
関連
-
Microsoft Sql server2005 のインストール手順のグラフィック詳細とよくある問題の解決法
-
SQL server 2005で自動番号フィールドを設定する方法
-
SQLServer 2005でサーバー名がない場合の2つの解決策
-
Sql server 2005 インストール時に Net バージョン登録要求の警告が表示される。
-
SQL Server 2005 ミラー構築マニュアル(sql2005 データベース同期ミラーリングソリューション)
-
SQLserverにおけるdeclare変数の使用法
-
PowerDesignerでSQL Serverデータベースをインポートする方法
-
sql2005 ローカルコンピュータの SQL SERVER サービスが起動し、その後停止する 解決方法
-
AccessからSQL Server 2005へのインポートの方法概要
-
[オリジナル】SQL2005再ビルドインデックスストアドプロシージャ sp_rebuild_index
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQL 2005が設定できない問題を解決する
-
WIN7でSQL Server 2005 Express Edition(Lite)のインストールと設定
-
SQL Server 2005 インストールパス ディレクトリ変更方法まとめ
-
Sqlサーバーのバックアップとリストア後の制限されたユーザーの問題
-
Sqlserver 2005のログファイルが大きすぎる削減する方法
-
SQL ServerでTRUNCATEトランザクションをロールバックする方法
-
SQL Server 2005 で Try Catch を使って例外を処理する
-
SQL Server 2005 の SQL 文の時限実行方法について
-
SQL Server 2005でリモートデータベース接続を開く方法
-
Sql Server 2005 のポート 1433 で LAN アクセスを開放し、リモート接続を行う。