ストアドプロシージャを使って検索がしたい

このQ&Aのポイント
  • テキストボックスに、グーグルとかみたいに、○文字○ スペース ●文字●と入れて、検索ボタンをおすと、○文字○と●文字●の両方の文字を含んだデータを表示したいと思っています。
  • ストアドプロシージャを使って、1つの文字列なら検索することは可能になったのですが、スペースで区切った文字2つを使ってのAND検索をすることができなくて困っています。
  • 複数の条件で検索する方法が全く浮かびません。スペースで区切った条件で検索する場合は、事前に処理が必要なのでしょうか。ご存知の方がいらっしゃいましたら、お手数ですが、ご教授いただけると助かります。
回答を見る
  • ベストアンサー

ストアドプロシージャを使って検索がしたい

プログラミング初心者です。 テキストボックスに、グーグルとかみたいに、 ○文字○ スペース ●文字●と入れて、検索ボタンをおすと、 ○文字○と●文字●の両方の文字を含んだデータを表示したいと思っています。 ストアドプロシージャを使って、1つの文字列なら検索することは可能になったのですが、 スペースで区切った文字2つを使ってのAND検索をすることができなくて困っています。 以下は、1つの文字列のみ検索できるストアドプロシージャのです。 ALTER PROCEDURE [dbo].[対応依頼書文字列検索V99] @str nvarchar(1000) As Create Table #tblIrai ( IraiNo int Primary Key(IraiNo) ) Insert #tblIrai Select 依頼書No From yamagata.dbo.対応依頼書基本情報 Where [依頼書No] Like '%' + @str + '%' Or [依頼日] Like '%' + @str + '%' Or [依頼部署] Like '%' + @str + '%' Or [依頼者] Like '%' + @str + '%' Or [作業希望日] Like '%' + @str + '%' Or [作業希望日補足] Like '%' + @str + '%' Or [区分] Like '%' + @str + '%' Or [依頼種別] Like '%' + @str + '%' Or [法人コード] Like '%' + @str + '%' Or [会社コード] Like '%' + @str + '%' Or [法人名称] Like '%' + @str + '%' Or [システム/機器名] Like '%' + @str + '%' Or [バージョン(品番)] Like '%' + @str + '%' Or [受付日] Like '%' + @str + '%' Or [受付者] Like '%' + @str + '%' Or [作業開始日] Like '%' + @str + '%' Or [作業終了日] Like '%' + @str + '%' Or [作業時間] Like '%' + @str + '%' Or [作業担当者] Like '%' + @str + '%' 複数の条件で検索する方法が全く浮かびません。 スペースで区切った条件で検索する場合は、事前に処理が必要なのでしょうか。 ご存知の方がいらっしゃいましたら、お手数ですが、ご教授いただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

言語が書いてないので、Cで scanf("%s %s",&str1,&str2); で Where[依頼書No]Like '%' + @str1 + '%' And[依頼日]Like '%' + @str2 + '%' とすればいいです。 ちなみにこれだけORをくっつけたら件数が増えると(数百件)時間がかかりますよ。

taka78ube
質問者

お礼

maiko0318さんの回答を元に、自己解決できました。 ありがとうございました。

taka78ube
質問者

補足

ご回答ありがとうございます。 言語書いてなくてすいません。 言語はサーバーサイドは、ASPのVBSで、クライアント側は、HTMLです。 検索部分は、テキストエリアにしています。 以下検索部分のソースです。 <form action = "kensakukekka.asp" method="POST"> <table border="1" cellspacing=0 cellpadding=4 class="sample_03"> <tr class="example"> <td style="width:300px; text-align:left; background-color: #00ff00;"> <b>検索内容入力</b> </td> <td> <textarea name="kensa" style="width:100%" rows=1 class="textbox"></textarea> </td> <td> <input type="submit" value="検索"> </td> </tr> </table> </form> 検索ボタンを押すと、kensakukekka.aspに値を渡して、 ストアドプロシージャーにて、検索結果をかえします。 以下は、サーバーサイドのストアドプロシージャー部分のソースです。 '検索文字取得 skensa = Request.Form("kensa") ' データベース接続の確立 Set Conn = ConnectDB(DSN) SQL ="EXEC 対応依頼書文字列検索V99 '" & skensa & "'" Set Rs = ExecSql(Conn, SQL) どうでしょうか。このやり方で、どこか追加したら、検索は可能でしょうか。 お手数ですが、ご存知でしたら、教えていただけると幸いです。

関連するQ&A

  • ストアドプロシージャについて

    お世話になります。 SQLServseのストアドプロシージャで、あるテーブルのテストデータを100件ほど作成したいと思っています。 しかし、プロシージャを実行すると「プライマリキーが重複しています」とエラーが出ます。 テーブル内にはすでにCODE='0001'と'0101'の2件が存在します。そのため挿入開始コードは'0002'としたのですが・・・。まだ同じエラーが発生します。 テーブル名:MST_USER  CODE char(4) ←キー  KBN  char(2)  NAME varchar(40)  PASS varchar(10) 作成したプロシージャ CREATE PROCEDURE dbo.test_update_USER AS declare @count int declare @kbn int set @count = 2 set @kbn = 0 while 1 = 1 begin update MST_USER set CODE = right('0000' + ltrim(str@count)), 4), KBN = right('00' + ltrim(str(@kbn)), 2), NAME = 'test' + ltrim(str(@count)), PASS = 'test' + ltrim(str(@count)) set @count = @count + 1 if (@count > 100) break if (@kbn > 3) set @kbn = 0 else set @kbn = @kbn + 1 end GO 何か間違えているのか自分ではわからなくなっている状態です。 どなたかご指摘いただけると幸いです。

  • ストアドプロシージャを実行時のパラメータについて

    はじめましてkou2000と申します。SQLServer2000でストアドプロシージャを作成していますがうまくいきません。 下記のようなことが実際にできるかご教授ください。 CREATE PROCEDURE TEST_PROCEDURE @SYUBETU nvarchar AS SELECT AAAAAAA INTO ##TMP FROM TEST WHERE BBBB IN (@SYUBETU) GO 上記のようなストアドプロシージャを作成しプログラムから実行する際に @SYUBETU = "'1','2','3','4','5'" のような可変の文字列を設定しストアドプロシージャを実行できますでしょうか? よろしくお願いします。

  • :ストアドプロシージャ内での配列の使用:

    :ストアドプロシージャ内での配列の使用: 環境 アプリケーション側:C#.net データベース側:Oracle10g アプリケーションから文字列の配列を引数として渡し、 プロシージャ内でその配列の中身がなくなるまでループでUPDATE文を実行しようとしています。 引数例(文字列配列):para[] (para[0]='ねこ',para[1]='ねずみ',para[2]='たぬき',para[3]='人',…) While文1週目では「ねこ」を、2週目では「ねずみ」をSET句に格納したSQLを実行するのが目的です。 同じストアド内であれば、結果セットをカーソルに放り込み フェッチ&Whileで順番に取得する事ができますが、 外部から引数として渡された配列をストアド内ループで順番に取得するにはどうしたらよいのでしょうか? アプリ側で引数を特定してから渡せば配列個数文ストアドをコールするという手段が取れますが 配列数が多くなった時に遅くなりすぎるという問題があります。 どなたか詳しい方おりましたらご教授いただきたく思います。宜しくお願いします。

  • ストアドプロシージャの実行について

    asp.net から sqlserver のストアドプロシージャを実行させる勉強をしています。 作成されているはずのストアドプロシージャを実行できずに困っています。 webformにテキストボックス、ボタン、データグリッドを貼り付け、ストアドプロシージャを作成し下記のプログラムを実行させるのですが上手くいきません。 (テキストボックスに任意で入力された数値のデータをボタンを押すと表示するものです) <エラー内容>→ ストアド プロシージャ 'proc1' が見つかりませんでした Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim cn As New SqlConnection Dim cmd As New SqlCommand cn.ConnectionString = "接続文字列" cmd.Connection = cn cmd.CommandText = "proc1" cmd.CommandType = System.Data.CommandType.StoredProcedure Dim p1 As SqlParameter = cmd.Parameters.Add("@param1", System.Data.SqlDbType.Int) p1.Value = TextBox1.Text cn.Open() Dim dr As SqlDataReader = cmd.ExecuteReader DataGrid2.DataSource = dr DataGrid2.DataBind() dr.Close() cn.Close() end sub ストアドproc1(場所:Northwind)の内容↓ CREATE procedure proc1 @param1 int as select * from products where categoryID=@param1 どなたか原因のわかる方がいれば、宜しくお願いします。

  • 全ストアドを対象に文字列を置換する方法について

    こんばんわ。 SQLServer2008にて1データベース内の全ストアドを対象に、 ストアドプロシージャ記述内で特定の文字列を検索し、置換する方法を考えています。 以下のようなsqlで、ストアド内に文字列があるものを検索することはできたのですが、 ここから先、「★★★」を「○○○」にREPLACEする方法がわかりません。 select routine_name from information_schema.routines where routine_definition LIKE '%★★★%' and routine_type='procedure' 以下のようなsqlで更新しようとしたら、エラーが発生しました。 update information_schema.routines set routine_definition = REPLACE(routine_definition, '★★★', '○○○') where routine_name = 'XXX' (error:システム カタログへのアドホック更新は許可されません。) 不定期にデータベース名を変更することがあり、ストアドの数が多いため、 一括で変換できる方法がないかと探しています。 手作業で変更していく他ないでしょうか。 なにかヒントだけでもご教示いただけると嬉しいです。 よろしくお願いします。

  • ストアドプロシージャでのパラメータのデータ型の質問

    いつもお世話になっております。たびたびの質問で恐縮です。 ストアドプロシージャでのパラメータのデータ型が設定できず困っております。たとえば次はパラメータの文字を表示させるものです。 CREATE OR REPLACE PROCEDURE test(p VARCHAR2(10)) IS t VARCHAR2(10); BEGIN t:=p; DBMS_OUTPUT.PUT_LINE(t); END; / コンパイルエラーになるので、パラメータのデータ型を、VARCHAR2のように(10)を取るとうまくいきます。しかし、変数定義の「t VARCHAR2(10)」の(10)を取ると文字列の制約制限からはずれるとのエラーになります。 VARCHAR2というのは、PL/SQLの変数あるいはパラメータではどのように記述すればよろしいのでしょうか。 基本的なことを理解しておらず、申し訳ありません。 どうか、よろしくお願いいたします。

  • MySQL5.0のストアドプロシージャで引数の使い方がわからなくて困っています。

    MySQL5.0のストアドプロシージャで引数の使い方がわからなくて困っています。 ストアドプロシージャで IF文で引数の空の判定と、 LIKE '%name%'にその引数を使いたいのです。 どなたかわかるかたいらっしゃいませんか? □プログラムからコールする strSQL = "CALL buttonaction_proc2(syohinCd, syohinCdLast, name, count) "; □ストアドプロージャ delimiter // CREATE PROCEDURE buttonaction_proc2(IN syohinCd INT(8), IN syohinCdLast INT(8), IN name VARCHAR(40), IN count INT(8)) IF ((syihinCd IS NOT NULL) OR (syohinCdLast IS NOT NULL) OR (name IS NOT NULL)) THEN AND (SYOHIN_CD BETWEEN syohinCd AND syohinCdLast) ELSE (IF syohinCd IS NOT NULL) THEN AND (SYOHIN_CD BETWEEN syohinCd AND count) ELSE IF (syohinCdLast IS NOT NULL) THEN ( AND (SYOHIN_CD BETWEEN 1 AND syohinCdLast) ) IF (name IS NOT NULL) THEN AND NAME LIKE '%name%' END IF END IF ORDER BY SYOHIN_CD; END //

  • ストアドプロシージャに複数のSQL文を書く

    いつもお世話になります。 OS:Windows XP SQL Server2005 ExpressEditionです。 テーブル名:testTable 列 :(1)number(intで主キーで自動採番)(2)name(nvarchar(50)) ストアドプロシージャを以下のSQL文で作成しました。 insert into testTable (name) values(''); update testTable set name = ltrim(str(SCOPE_IDENTITY())) + '_table' where number=SCOPE_IDENTITY(); (説明) インサート文;(セミコロンを打っています) アップデート文;(セミコロンを打っています) なぜこんなことをするかと言いますと、 自動採番で取得した番号を列:nameの内容の一部にしたいためです。 つまり、列:numberが12で採番されたとすると列:nameは 12_table と したいためです。 ltrimをかけていますのは、str(SCOPE_IDENTITY())の結果、数値の左 に空白が入ってしまうためです。(intのバイト数ほどでしょうか) 想定どおりの値がnameに入っております。 しかしこれは邪道ではないかと危惧しております。 よろしくご教授をお願いいたします。

  • 検索するプログラミング

    C言語の問題で、ユーザが文字列を入力し、半角英数字の入力(最大でも1000文字)を改行があるまで受け付ける。次に、ユーザに検索する文字列(最大でも半角20文字)を入力させ、はじめに入力された文字列内にあるかどうかを表示するプログラムを作成する。配列の外部を参照しないように注意する。そのプログラム内で以下の関数を完成させる。 int str_srch (char str [], char srch_str[]) : 文字列strの中に文字列srch_strが含まれていれば、1を返し、含まれていなければ0を返す関数とする。 このような感じになると思うのですがどなたか分かりませんか? int str_compare(char *s1, char *s2) { //文字列s1の先頭にs2が含まれていれば等しいければ1、 //そうでなければ0を返す //while文を利用して、s2の1文字目からs2がヌル文字になるまで //繰り返し、s1の対応する文字と等しいかどうかチェック //s2の最後の文字まで等しければ、1 //そうでなければ0を返す } int str_length(char *str) { //文字列strの長さを返す } int str_srch(char *str, char *srch_str) { int strlen, srch_strlen; int i,j=0; strlen =str_length(str); //文字列strの長さ srch_strlen =str_length(srch_str); //文字列srch_strの長さ for(i=0;i<strlen;i++){ //strのi文字目からにsrch_strがあるかどうか  j=j+str_compare(&str[i], srch_str) } //jは文字列srch_strが文字列strに何回含まれているか、を表す //jが1より多くなれば1を返し //jが0なら0を返す }

  • ストアドファンクションの実行

    CREATE OR REPLACE FUNCTION hoge(str IN VARCHAR2) ~ を作成した後、 PL*SQLにてSQL> exec hoge('fuga'); を実行すると、 行1でエラーが発生しました。: ORA-06550: 行1、列7: PLS-00221: 'hoge'がプロシージャではないか、または未定義です・ ORA-06550: 行1、列7: PL/SQL: Statement ignore と言われます。 どうすればエラーを解決できますでしょうか? 助言を宜しくお願い致します。