函数返回非组Select语句中使用的多于1个值

时间:2017-06-22 09:17:00

标签: sql-server sql-function

我有一个民用状态列而不是int数据类型,其值为0-4。 0是单身,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

我创建了一个存储过程,它将显示表中的所有行,但是将Civil状态替换为参数是Civil状态在该行中保存的数字的函数。

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

但结果并非我的预期。该函数返回一个对象中所有行的所有值,这些值返回有关返回多个值的子查询的错误。 如何返回EACH行的值?

1 个答案:

答案 0 :(得分: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