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
表中)区域性
- 如果
为空,则为“en US”@InputCulture
- 如果
不为null,但也不是现有值,则为“en-US”,例如“evil”@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;
我本来希望写下这一切能帮助我看到区别,但我还是做不到。我想使用一个存储过程和输出参数,以便可以从另一个存储过程执行此检查 您需要在对SP的调用中将参数指定为输出
DECLARE @v varchar(5)
EXEC checkCultureCode 'evil', @v OUTPUT
SELECT @v;
要获得@ValidCulture的值,您需要额外的选择,请参阅我的答案。由于您的逻辑不需要对数据进行更改,因此您实际上可以使用UDF而不是存储过程。这样你就不必和我们的女朋友乱搞了。你的用法会更简单。