2016-05-18 5 views
0

私はいくつかのパラメータを持つSQLストアドプロシージャを持っており、いくつかのパラメータに対して(同じ)行からいくつかのカラムを使用して呼び出す必要があります。ここでは、現在の実装では、(存在する未使用の列/パラメータを、含みません)、次のようになります。これは、複数の選択の改良であるストアドプロシージャのパラメータとして行のいくつかの列を使用する

DECLARE @id int; 
select @id = min(id) from Table_1; 
declare @param1 nvarchar(10), @param2 nvarchar(10); 
select @param1 = param1, @param2 = param2 from Table_1 WHERE [email protected]; 
EXEC [dbo].otherProc @param1, @param2; 

を、私はせずにこれを行う方法があるかどう思って助けることができません変数(@idを除く)。 EXECステートメントで直接選択しても機能しないようです(あるいは、正しい構文がわからないかもしれません)。

+3

を://msdn.microsoft.com/en-us/library/bb510489.aspx F = 255&MSPPError = - ? 2147217396 –

+0

プロシージャを変更して、 '@ id'パラメータだけを受け入れ、他のコードと一緒にプロシージャ内の選択を実行することができます.Oracleでは、単一の変数/パラメータをaの行として指定できる' RowType '特定のテーブルが、afaik、SQL Serverはこれを持っていません。 – gmiley

+0

通常のストアドプロシージャの@gmileyは良い考えですが、私のケースではotherProcはCLR(C#コードから自動生成されます)であるため、コードを悪化させるだけです。 – MASQ

答えて

0

ストアドプロシージャを変更することができなければ、私が思いついただけな改善はこれです:

DECLARE @id int, @param1 nvarchar(10), @param2 nvarchar(10); 
select @id = min(id) from Table_1; 

select TOP 1 @id = id, 
     @param1 = param1, 
     @param2 = param2 
from Table_1 
order by id; 

あなたは、単一のSELECT文ですべてのパラメータを移入この方法。

+0

私のコードは、それらをすべて1つのステートメントに取り込みます。私はパラメータを避けることを望んでいました。なぜなら、それらを通る値を渡す以外は何もしないからです。 – MASQ

+1

あなたが投稿したコードは、最初に '@ Id 'を入力し、その後は他のパラメータに値を設定します。私は '@ id 'に他のものを取り込みます。プロシージャーを変更できる場合は、@ idだけを渡してプロシージャー内の他のものをすべて取り込むことができます。 –

1

あなたはダイナミックな解決策を実行できます:あなたは、テーブル重視タイプ/ parameters.httpsをしたい

DECLARE @sql nvarchar(max) 
SELECT @sql = ' 
EXECUTE dbo.OtherProc ''' + param1 + ''',''' + param2 + ''';' 
FROM Table_1 
WHERE [email protected]; 

EXECUTE (@sql); 
関連する問題