从单个输出参数返回多个值

时间:2014-02-26 15:04:45

标签: sql sql-server stored-procedures

有没有办法让Stored Procedure通过一次调用返回结果集的整个列?

我有一个存储过程,它根据引用查询一组用户。

情景:

  1. user1有client1。我使用user1的clientId
  2. 调用存储过程
  3. 我想获取client1下的所有其他userId,然后将它们添加到Sharepoint组中。
  4. 有办法做到这一点吗?

    SP片段

    DECLARE @clientId Int,
    DECLARE @userId OUTPUT
    
    SELECT @userId = UserId FROM Clients WHERE clientName = @clientId
    

    由于

2 个答案:

答案 0 :(得分:1)

您只需编写如下所示的SP,不带任何参数,以便它返回该特定客户端的所有UserIds的数据表。

CREATE PROCEDURE GetALLUserIdsForClient
        @clientId AS Int 
AS
BEGIN
SELECT UserId FROM Clients WHERE clientName = @clientId
END

从C#代码调用以上存储过程。这将返回一个数据表。您的C#代码可以循环并将用户添加到组。

答案 1 :(得分:0)

是的,在sql server中很容易,你必须指定RETURNS TABLE子句。

--Transact-SQL Inline Table-Valued Function Syntax 
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS TABLE
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    RETURN [ ( ] select_stmt [ ) ]
[ ; ]

完整语法和手册:http://technet.microsoft.com/pl-pl/library/ms186755.aspx

哦,如果可编程对象返回值,那么它被称为函数而不是过程。程序在很多方面与功能不同。