• 締切済み

動的にパラメータを渡す方法

検索のWEBサイトを作成しています。 ユーザの入力値を分解し、ストアドプロシージャに渡してDB検索をしたいのですが、パラメータ数を動的にするには、どうしたらいいのでしょうか。 どなたかアドバイスください。

  • ak72
  • お礼率85% (12/14)

みんなの回答

回答No.1

Web サーバ側は何で作っているのでしょうか? 例えばストアドプロシージャ側で CREATE PROCEDURE SearchContents (@sqlWhere nvarchar(255)='') AS DECLARE @query nvarchar(500) SET @query = 'SELECT * FROM hoge ' + @sqlWhere EXEC sp_executesql @query GO ってのを作っておいて、 Web サーバ側の言語で、 検索文字列を分解する。 WHERE に続く部分の SQL 文字列を生成する って処理を行って、ストアドプロシージャ「SearchContents」に引数として、生成した WHERE~ の部分を与えるってのはどうでしょうか? もちろん、不正な文字列が入力されていないかとか、文字列は長すぎないかとか、SQL インジェクションになりそうなものは排除するようにする必要があります。

ak72
質問者

補足

回答ありがとうございます。 サーバ側は ASP(VBScript)です。 検索条件の文字列作成処理がかなり長くなってしまい、VBScript での文字列連結の処理を何とか減らせないか、と思って質問した次第です。 なるほど、ちょっと試してみます。 ありがとうございました。

関連するQ&A

  • ASPからストアドプロシージャにパラメータが渡せない

    正常に動作していたASPに、ストアドプロシージャに渡すパラメータを追加してブラウザでテストをしたのですが、「データの型が一致しない」という意味あいのエラーメッセージが表示されます。 しかし、送り側はHTMLのテキストボックスに入力された値で、受け取り側はvarchar型ですので、間違っていないはずです。 また、追加したパラメータ以外のパラメータをコメントにして実行すると、正常に動作します。 同じ開発チームの方から、「パラメータとして渡すときに、バイト数に制限があるのでは?」とか、「そのような事に関することがマイクロソフトのバグ情報に載っていた記憶がある」とか教えていただいたのですが、それらしき項目はありませんでした。 また、ストアドプロシージャ単体では、正常に動作しています。 どなたかわかる方、よろしくお願いいたします。

  • ASP.netにストアドプロシージャが登録できない

    ASP.netにストアドプロシージャが登録できません。 SQLServer2000にストアドプロシージャを作成しASP.netにsqlcommandを作成。 sqlcommandのプロパティのcommandtypeをStoredProcedureとし、 commandtextにストアドプロシージャ名を入力すると このコマンドの新しいパラメータコレクションを作成しますか?と出てきて 「はい」とするとサーバー名選択画面となり、サーバー名を正しく入力し ログインID、パスワードも正しく入力、オプションも正しく入力したが OK押下後にプロパティの値が無効ですとなってしまい詳細を見ると ストアドプロシージャ***がデータベースに見つかりませんでしたと なってしまいます。 既存のストアドプロシージャはリンク出来るのですが、新規のものが このようになります。原因・解決方法を教えて頂きたく宜しくお願いします。

  • MYSQLのストアドでの動的SQLについて

    MYSQL初心者ですが、よろしくお願いします。 MYSQL(ver5.5)でストアドプロシージャを作成しようと思います。 WEBの検索画面に入力された条件に応じて、WHERE句を動的に作成したいのです。 例えば、WEBの検索画面の検索条件に、 (1)氏名 (2)住所 (3)電話番号 があり、(1)と(3)に入力された場合は、 あるテーブルの検索条件を WHERE 氏名=入力氏名 AND 電話番号=入力電話番号 のように動的にSQLを作成したいです。 (条件に応じて、静的なSQLを使い分けるやりかたはしたくない) このような動的なSQLはストアドプロシージャで作成できのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • DB2でのストアドプロシージャの作成方法

    DB2でのストアドプロシージャの作成方法を教えて下さい。 アプリケーションサーバツールキットを使用せずに、 DB2のコントロールセンターなどで作成することはできないのでしょうか。 コントロールセンター以外での作成方法も含め、どんなことでもいいのでアドバイスお願いします! よろしくお願いします。

  • データベースを作成するプロシージャ

    Webで動作するシステムをユーザー単位でDBを作成し、管理しようと思うのですが、(1)DBを作成するプロシージャというものは作成できるのでしょうか? (2)というかそのようなWebシステムを作成したい場合、1ユーザーにつき1DBという管理方法で正しいのでしょうか? (3)1ユーザーにつき1DBの場合、MYSQLのDBはMY.INIで設定されたメモリを超えない範囲ならいくつでもDBを作成できるのでしょうか? (4)そして作成するプロシージャを作成する場合、以下のような感じでINパラメータのusernameをプレフィックス「DB_」の後ろにつけて作成しようと思うのですが、その場合パラメータをDB_の後ろに連結するにはどのように記述したらよいのでしょう? userkanridb:ユーザを管理しているメインのDB。ここにプロシージャを作成しようと思っています。 DELIMITER $$ DROP PROCEDURE IF EXISTS `userkanridb`.`newDB` $$ CREATE PROCEDURE `userkanridb`.`newDB` (in username integer(8)) BEGIN DROP TABLE IF EXISTS `DB_`.`mConfig`; CREATE TABLE `DB_`.`mCconfig` ( `shime` int(2) NOT NULL, `usernm` varchar(20) NOT NULL, `style` tinyint(1) NOT NULL, `message` varchar(20) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; END $$ DELIMITER ; ご伝授御願いします。 MySQLのバージョン:MYSQL5.0.51

    • ベストアンサー
    • MySQL
  • VBでストアドの戻りパラメータを受け取る方法

    VB6.0からADOを利用してSQLServerのストアドプロシージャを呼出し、戻りパラメータを受け取る方法がありましたら教えてください。よろしくお願いします! CREATE PROC TEST ( I_VAL AS INT, O_VAL AS INT OUTPUT ) ~省略~

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

    はじめまして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'" のような可変の文字列を設定しストアドプロシージャを実行できますでしょうか? よろしくお願いします。

  • アクセスadpでのDLookUp関数

    アクセス2003 adpのレポートのあるコントロールのコントロールソースにDLookUp関数を使おうとしています。 =DLookUp("列名","ストアドプロシージャー名") *ストアドプロシージャーの抽出条件にパラメータを設定してあります レポートの「入力パラメータ」にも記入してあります *ストアドプロシージャーを実行した結果のレコードは1つのみです mdbでは =DLookUp("列名","クエリー名") でうまくいっていたのですが adpの場合#エラーになってしまいます 一時ファイルにレコードを追加してそれを引数にすればうまくいくのですが、 できればストアドプロシージャーを引数にしたいと思っています。 どなたかご教授をお願いいたします

  • SQLServer2005のストアドプロシージャのデバックの設定方法をご教示ください

    SQLServer2005でストアドプロシージャを作成しました。 VisualStudioを使用すればデバッグ(一行ずつ実行して、変数の中身や動作を確認)できるということですが、設定がうまくできません。 ストアドプロシージャ作成は初めてで、周りにも経験者がいないため解決策がわからない状態です。 ご存知の方、気がついたことがある方は、ぜひご教示ください。 ■■ マシン環境 ■■ OS:Windows2003Server DB:SQLServer2005 ■■ 試した方法 ■■ 1.DBサーバマシンのVisualStdio2005を使用 上記マシンに、SQLServer2005をインストールしたとき、  VisualStudio2005が自動的にインストールされたので これを使用することを考えました。 VisualStudio2005の「サーバーエクスプローラー」に、 今回作成したストアドプロシージャを表示するところまではできたのですが、 デバッグ実行できません。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウを表示するらしいのですが メニューには、以下のものしか表示されません。  新しいプロシージャの追加 / 開く / 実行 ためしに実行すると、ストアドプロシージャは動作します (テーブルへのデータINSERTをストアドでコーディングしており、実行後に指定値が入っていたため) しかし、デバッグポイントを設定できず、ステップ実行もできません。 2.別マシンのVisualStdio2003を使用 私の開発マシンにはVisual Studio 2003が入っているため、 DBサーバマシンとリモートで接続して、上記と同様の設定を行いました (このVisual Studio2003はC#開発用にインストールしたものです)。 こちらは、メニューに「ストアドプロシージャのステップイン」が出ました。しかし……。 メニューから「ストアドプロシージャのステップイン」を選択してデバッグウインドウが表示されたときに、以下のメッセージボックスが出ます。 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 デバッグウインドウ上でデバッグポイントは設定できますが、 ストアドプロシージャを実行してもデバッグポイントでとまらず ステップ実行もできません。 (同様にINSERTしたテーブル値から、ストアド自体は動作していると判断) なお、1.2.共にSA認証でSQLServer2005にログオンしています。 SQLServer のデバッグできるのは、sysadminサーバロールを持つユーザだけらしいですが、 SA認証で使用しているユーザには「sysadmin」のサーバロールは設定しています。 ■■ 質問 ■■ 1) QLServer2005インストールで自動的にインストールされるVisualStudioでは、 ストアドプロシージャのデバッグはできないのでしょうか? それとも、SQLServer2005インストール時に、開発環境等の追加設定や、 別途VisualStudio2005をインストールする必要があるのでしょうか? それとも、別にSQLServer management Studioや構成ツール等で設定が必要なのでしょうか? または、メニューに「ストアドプロシージャのステップイン」を出す設定(方法)をご存知の方、ご教示をお願いします。 2) 「SQL Server データベースが正しくセットアップされていないか、またはユーザーに master.sp_sdidebug を実行する権限がないため、ストアド プロシージャをデバッグできません。」 このメッセージはどうすれば回避できるのでしょうか? SQL Server データベースが正しくセットアップされていないということですが、 これまで特に支障がないため問題はないと思っているのですが……。 検索で以下のサイトを見つけましたが、SQLServer2000のため参考になるかは疑問です。   http://support.microsoft.com/kb/839280/ja   http://support.microsoft.com/kb/886680/ja 以下のサイトは、どうすれば原因回避できるのかわかりませんでした(勉強不足を感じております)   http://msdn2.microsoft.com/ja-jp/library/ms164014.aspx master.sp_sdidebug を実行する権限の設定方法をご存知の方、ご教示いただけませんでしょうか? 3) Visual Studio以外で、SQLServer2005のストアドプロシージャをデバッグする方法がありましたらご教示ください。 変数の途中の値を一時テーブルにINSERTして確認するくらいしか方法はありませんでしょうか? 申し訳ございませんが、もしご存知の方、ご教示いただけませんでしょうか? なお、設定やマシン環境で記述不足等ありましたら、ご指摘いただければと思います。 以上です。よろしくお願いします

  • SQL ServerのストアドでOUTPUTパラメータを2つ

    VB.NETとSQL Serverでストアドプロシージャーを使用しています。 OUTPUTパラメータを2つ使用したいのですが、VB.NET側での受け取り方法がよくわかりません。 ご存知の方がいらっしゃいましたら、よろしくお願いします。