Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储的过程输出参数上的Coalesce/IsNull_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 存储的过程输出参数上的Coalesce/IsNull

Sql 存储的过程输出参数上的Coalesce/IsNull,sql,sql-server,tsql,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')

我有一个存储过程:

[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
    的值(如果它存在于
    区域性
    表中)
  • 如果
    @InputCulture
    为空,则为“en US”
  • 如果
    @InputCulture
    不为null,但也不是现有值,则为“en-US”,例如“evil”
但当我这样做时,我会得到
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;

我本来希望写下这一切能帮助我看到区别,但我还是做不到。我想使用一个存储过程和输出参数,以便可以从另一个存储过程执行此检查

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

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

要获得@ValidCulture的值,您需要额外的选择,请参阅我的答案。由于您的逻辑不需要对数据进行更改,因此您实际上可以使用UDF而不是存储过程。这样你就不必和我们的女朋友乱搞了。你的用法会更简单。