Coalesce / IsNull存储过程输出参数

时间:2012-05-08 18:26:43

标签: sql sql-server tsql

我有一个存储过程:

[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表中)
  • 'en-US'如果@InputCulture为空
  • 'en-US'如果@InputCulture不为空,但也不是现有值,例如。 '恶'

但是当我这样做时我得到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;

我曾希望将所有这些写下来会让我看到差异,但我仍然不能。我想使用存储的proc和输出参数,以便我可以从另一个存储过程执行此检查。

1 个答案:

答案 0 :(得分:3)

您需要在对SP的调用中将参数指定为OUTPUT。

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