2

ストアドプロシージャがあります:

[checkCultureCode]
@InputCulture varchar(5) = 'en-US',
@ValidCulture varchar(5) OUTPUT
AS
BEGIN
SELECT @ValidCulture = CultureName FROM Culture 
    WHERE CultureName = @InputCulture 
SELECT @ValidCulture = COALESCE(@ValidCulture, 'en-US') 
    -- or ISNULL(@ValidCulture, 'en-US')
END

私は次のいずれかを取得することを期待します:

  • @InputCulture私に返された値(Cultureテーブルに存在する場合)
  • @InputCulturenullの場合は「en-US」
  • 'en-US'@InputCultureは、nullではなく、既存の値でもない場合。'悪の'

しかしnull、私はこれを行うと得ます:

DECLARE @v varchar(5)
    EXEC checkCultureCode 'evil', @v
SELECT @v;

これは機能し、答えとして「en-US」を取得します。

DECLARE @v varchar(5)
    SELECT @v = CultureName FROM Culture WHERE CultureName = 'evil' 
    SELECT @v = COALESCE(@v, 'en-US')
SELECT @v;

これをすべて書き留めておけば違いがわかると思っていたのですが、それでもできません。別のストアドプロシージャからこのチェックを実行できるように、ストアドプロシージャと出力パラメータを使用したいと思います。

4

1 に答える 1

3

SPの呼び出しでは、パラメータをOUTPUTとして指定する必要があります。

DECLARE @v varchar(5)
EXEC checkCultureCode 'evil', @v OUTPUT
SELECT @v;
于 2012-05-08T18:35:35.637 に答える