2017-06-22 94 views
0

我有一个列的公民状态比int值数据类型的值为0-4。 0单身,1已婚,等等。函数返回的值超过1个用于非组选择语句的值

我希望列显示状态代表他们的数字,所以我做了一个函数,测试该值并返回等效的字符串状态值。

CREATE function civilStatus 
 
(
 
@status int 
 
) 
 
RETURNS varchar(50) 
 
AS 
 
BEGIN 
 
DECLARE @result_status varchar(50) 
 

 
SELECT @result_status = (
 
SELECT CONVERT(varchar,(CASE Civil 
 
WHEN 0 THEN 'Single' 
 
WHEN 1 THEN 'Married' 
 
WHEN 2 THEN 'Separated' 
 
WHEN 3 THEN 'Divorced' 
 
WHEN 4 THEN 'Windowed' 
 
END)) 
 
FROM UserInfo) 
 

 
RETURN @result_status

和我做了一个存储过程,将显示表中的所有行,但替换其中的参数是什么号码的婚姻状况该行持有该函数的婚姻状况。

CREATE PROCEDURE [dbo].DisplayUsers 
 
\t 
 
AS 
 
\t SELECT Firstname, 
 
    Lastname, 
 
    City, 
 
    Country, 
 
    ([dbo].civilStatus(Civil)) AS "Civil Status" 
 
    FROM UserInfo

但结果不是我所期待。该函数返回一个对象中所有行的所有值,该对象返回有关返回多个值的子查询的错误。 如何返回每行的值?

+0

给出输入为整数 – mohan111

+0

你是什么意思? – ejmtv

+0

dbo.civil(1)AS“Civil Status” – mohan111

回答

2

您可以使用它。它会为你工作。

CREATE function civilStatus 
(
@status int 
) 
RETURNS varchar(50) 
AS 
BEGIN 

DECLARE @result_status varchar(50) 

SET @result_status = 
CASE @status 
WHEN 0 THEN 'Single' 
WHEN 1 THEN 'Married' 
WHEN 2 THEN 'Separated' 
WHEN 3 THEN 'Divorced' 
WHEN 4 THEN 'Windowed' 
END 

RETURN @result_status 
End 
+0

你是一个拯救生命的人! – ejmtv