- PR -

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

1
投稿者投稿内容
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2005-11-07 15:01
いつもお世話になっております。
C#.net、SQL Server2000で開発しているのですが、
ストアドプロシージャについて質問させてください。

画面に検索条件部と一覧表示部があり、
検索条件で指定した内容を、一覧に表示させるため、ストアドプロシージャを用いて、
表示させたいページのみ値を返そうとしています。
この際、検索条件で指定した内容を、引数としてwhere句およびorderby句を持とうとしているのですが、
(引数@whereの例:"WHERE testa = '0' AND ・・・"。条件の内容を全てWHERE句として引数で渡す)
どうにも上手く行きません。
現在は以下のようにしているのですが、@whereのところで構文エラーとなってしまいます。
@whereを省いた場合は、@orderByの部分でエラーとなります。


--------ストアドプロシージャここから--------
CREATE PROCEDURE paging
@where varchar(50),
@orderBy varchar(20),
@current int,
@Size int
AS
CREATE TABLE #tu
( rowID int IDENTITY(1,1),
testa varchar(15),
testb varchar(40) )
INSERT INTO #tu(testa, testb)
SELECT testa,testb
FROM tablename
@where
ORDER BY @orderBy

DECLARE @first int,@last int
SELECT @first=((@current-1)*@Size)+1
SELECT @last=(@current*@Size)
SELECT * FROM #tu
WHERE rowID BETWEEN @first AND @last;
--------ストアドプロシージャここまで--------

/* 値取得SQL文例(1ページ目を5レコード) */
EXEC paging 1,5;


このような場合、上手く検索条件やorderby句を与える方法はないものでしょうか?
条件の各値のみを引数として、
WHERE testc = @where3
AND testd = @where4
のように1つずつ指定するしかないでしょうか?

宜しく御願いします。
檸檬
ベテラン
会議室デビュー日: 2004/04/26
投稿数: 87
投稿日時: 2005-11-07 15:20
プロシージャ引数のWHERE句でSELECT文が実行できればいんですよね。
うちは以下の方法で実行しています。

変更前
--------------------
SELECT testa,testb
FROM tablename
@where
ORDER BY @orderBy
--------------------

この部分を、以下のようにします。

変更後
--------------------
DECLARE @strSQL nvarchar(1000)

set @strSQL = 'SELECT testa,testb FROM tablename ' + @where + ' ORDER BY ' + @orderBy

EXECUTE SP_EXECUTESQL @strSQL
--------------------

[ メッセージ編集済み 編集者: あおい 編集日時 2005-11-07 15:22 ]
水谷
会議室デビュー日: 2004/05/07
投稿数: 17
お住まい・勤務地: 福島県
投稿日時: 2005-11-07 15:22
水谷です。

SQL を文字列として組み立てて sp_executesql で実行、というのはいかがでしょうか。
art
常連さん
会議室デビュー日: 2005/05/10
投稿数: 25
投稿日時: 2005-11-07 16:02
あおい様、水谷様。

ご回答ありがとうございます。
お教えいただいた通りの方法で無事解決致しました。

また何かの折には宜しく御願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)