SQLサーバーのストアドプロシジャを記述するにあたりWHEREのフィールド名と値を動的に設定する方法を教えてください。

A 回答 (2件)

私も調べていて困っています。


ストアドプロシージャの引数を@Code(検索値)、@Kbn(対象項目)とした場合、

SELECT *
FROM TableA A
WHERE @Code =
     CASE @Kbn
       WHEN '1' THEN A.SyohinCd
       WHEN '2' THEN A.TantouCd
       ELSE @Code         --全件
     END

こんな感じで出来そうな気がします。
実行環境が無い為、動作確認していません。
    • good
    • 0

一般的な回答になってしまいますが、「ホスト変数」といわれるものを使えばできると思います。


SQLサーバ(Microsoftの?)は使ったことが無いので具体的にはよく判りませんが、ヘルプなどを検索すると出てくるかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QSQL サーバーのストアドをAccessのクエリーに変換

SQL Server 7.0 のストアドプロシージャーをAccess2000のクエリーに
簡単に変換する方法を教えてください。

Aベストアンサー

多分簡単にはできないでしょう。
場合によっては、クエリー+DAO/ADOに書き直す
必要があるかもしれません。

MSDE+ADPにスケールダウンするほうが楽だと
思います。

QPL/SQL ORA-06502エラーに関して(動的SQL)

こんにちは、いつもお世話になっております。
現在、会社で動的SQLを使用してとある開発をおこなっているのですが、
どうしても上手くいかないので、どなたか教えて下さいm(__)m
下記の動的SQL文で最後から2行目のSQL:DBMS_OUTPUT.PUT_LINE(varDel);
を実行するとORA-06502: PL/SQL:
数値または値のエラー: 文字列バッファが小さすぎます。のエラーが
発生します、過去ログやgoogleで検索をかけてみたのですが、
どうにも解決方法がわからず困っています・・・・
お知恵のある方、教えて下さいませm(__)m
※多分、sql文が長いせいだとは思うのですが、どうしても
これ以上は短くできず、静的ではなく、動的で動かさなければならない
という条件付きなんですが、宜しく御願いします。

DECLARE
numkeepD NUMBER := 0; -- データ保管期間格納用
varAST VARCHAR2(4) := '**'; -- アクセス区分定義外格納用
varkeepD VARCHAR2(2000); -- KEEP_DAYS取得SQL文格納用
varDel VARCHAR2(2000); -- DELETE文格納用

BEGIN
varkeepD := 'SELECT KEEP_DAYS FROM SMCI4T910 WHERE ACC_KBN = '''||varAST||'''';
DBMS_OUTPUT.PUT_LINE(varkeepD);
EXECUTE IMMEDIATE (varkeepD) INTO numkeepD;
DBMS_OUTPUT.PUT_LINE(numkeepD);
-- アクセスログデータ削除SQL文格納
varDel := 'DELETE FROM '||cTABLE_STCI1T910||' ST910 '
||'WHERE '
||'ST910.DELETE_FLG = SCIS_CTS.cDEL_NO AND '
||'EXISTS('
||'SELECT 1 '
||'FROM SMCI4T910 SM910 '
||'WHERE '
||'ST910.ACC_KBN = SM910.ACC_KBN AND '
||'ST910.ACC_CYMD < TO_CHAR(SYSDATE - SM910.KEEP_DAYS,''YYYYMMDD'') AND '
||'ST910.ACC_KBN <> varAST AND '
||'SM910.DELETE_FLG = SCIS_CTS.cDEL_NO)';
DBMS_OUTPUT.PUT_LINE(varDel);
--EXECUTE IMMEDIATE (varDel)
END;

こんにちは、いつもお世話になっております。
現在、会社で動的SQLを使用してとある開発をおこなっているのですが、
どうしても上手くいかないので、どなたか教えて下さいm(__)m
下記の動的SQL文で最後から2行目のSQL:DBMS_OUTPUT.PUT_LINE(varDel);
を実行するとORA-06502: PL/SQL:
数値または値のエラー: 文字列バッファが小さすぎます。のエラーが
発生します、過去ログやgoogleで検索をかけてみたのですが、
どうにも解決方法がわからず困っています・・・・
お知恵のある方、教えて下さいませm(...続きを読む

Aベストアンサー

ごめんなさい、"SUBSTRB"の方がいいですね。

文字数ではなくバイトで切り出しです。

QacsessのSQLでフィールド名と説明(コメント)を取得する方法

AcsessのSQLでフィールド名と説明(コメント)を取得する方法はありますでしょうか?

オラクルでしたら
SELECT [COLUMN_NAME], [RTRIM(COMMENTS)] FROM テーブル名
で取得できる様ですが、Acsessはだめでした。

よろしくお願いいたします。

Aベストアンサー

列名の取得:Name
コメントの取得:Properties("Description")

以下が参考になります。
http://www2.moug.net/bbs/acm_v/20051206000007.htm

QOracle8i ストアドプロシジャ

表名(テーブル名)等を変数にセットし、
いざ使おうとするとエラーになります。
何か関数を使えば、正しく動くものなのか。
ご存知の方、ご教授ください。

例:表領域名、DB_LINK名がデータとして存在する

変数A := 表領域名変数 || '表名' || DB_LINK名変数;
select * from 変数A;

上記を「select * from ????(変数A);」
と、すれば出来そうな気がするのですが、????が何か、
または、別の方法があれば、教えてください。

Aベストアンサー

たぶんですが、表名を変数にしたいのであれば、そのままでは動かないはずです。
確か、DBMS_SQLパッケージを使わないと、ストアドプロシージャでは使えないはずです。(動的問合せです。)
DBMS_SQLパッケージについては、さまざまなところに使用法などがあると思いますので、検索してみてください。

QAccessからストアドプロシジャ実行方法教えてください

Accessから、ODBC経由でOracle7のストアドプロシージャを実行するにはどのようにすればよろしいのでしょうか?

Aベストアンサー

データコントロールでOracleに接続しストアドプロシジャを実行するのは。
OptionsプロパティにdbSQLPassThroughを指定しRecordSourceプロパティのSQL文を直接SQLServerに解釈させるようにする。
直接SOLを投げる。SQL文はExecに続けてストアドプロシージャ名、パラメータの値です。
これで良いと思いますが。


人気Q&Aランキング

おすすめ情報