2011-03-08 64 views
1

我知道我可以创建一个表值函数,如果我想从一个功能,但对于功能在那里我会永远返回多个变量只返回一条记录,这似乎是一种矫枉过正。我宁愿将所有值作为变量返回。我想这可以使用OUTPUT子句完成。如果你让我知道它的可能性,如果它是,请指导我如何去解决它会感激?没有在msdn中找到一个简单的方法。如何使用OUTPUT从一个函数在SQL Server2005中返回多个变量

谢谢。

+0

为什么不使用存储过程返回结果集? – 2011-03-08 22:44:33

回答

2

你需要OUTPUT参数,而不是OUTPUT条款,如果我正确地理解你的要求。 (这些只适用于存储过程不过)

CREATE PROC outputdemo 
@name varchar(50), 
@status int OUTPUT, 
@type nchar(3) OUTPUT 
AS 
SELECT @status = status, @type = type 
FROM master..spt_values 
WHERE [email protected] /*<--Pretend this is the PK*/ 

GO 

DECLARE @status int, @type nchar(3) 
EXEC outputdemo 'rpc', @status OUTPUT, @type OUTPUT 
SELECT @status AS status, @type as type 

如果你问明确有关标量UDF然后我可以想返回多个值的唯一办法是通过XML或自定义UDT或其他类似的机制。

+0

谢谢!这正是我需要的,但是对于一个功能......尽管如此,感谢让我知道它不能在功能上完成。我没有使用表值函数(返回单个记录)。 XML也是一个不错的选择,但是随后在我的调用过程中使用Xqueries会让它变慢并且失败了整个目的。再次感谢。 – Tintin 2011-03-08 23:01:26

0

不幸的是,你不能有功能的输出参数;你只能返回一个标量或一个表。

然而,您可以有程序的输出参数。

0
create procedure GetMultipleValues 
(
    @ValueOne int out,   -- decorate parameters with out 
    @ValueTwo nvarchar(100) out 
) 
as 
set @ValueOne = 1 
set @ValueTwo = N'Hello, world!' 
return 
go 



declare @MyInteger int 
declare @MyString nvarchar(100) 

exec GetMultipleValues @MyInteger out, @MyString out -- decorate arguments with out 

print @MyInteger -- 1 
print @MyString -- Hello, world! 
+0

谢谢。这有帮助。 – Tintin 2011-03-08 23:01:53