2015-02-08 97 views
0

我有一个执行另一个过程的过程,我需要将结果保存到一个变量中。将执行过程结果保存到SQL Server 2008中的var

我该怎么做?

ALTER PROCEDURE sp_GetDetailsByUserId 
    @userId int 
AS 
BEGIN 
    SELECT 
     usr.FirstName, usr.LastName, usr.UserName, usr.Email 
    FROM 
     [User] usr 
    WHERE 
     usr.UserID = @userId 

    EXEC sp_GenerateRandomPass @userId // this result need to be inside a var 
END 

我是初学者,需要帮助。

谢谢。

+0

你的意思是'var'。 'sp_GenerateRandomPass'过程是否返回表或什么? – 2015-02-08 07:49:36

+0

备注:您应该**不要**为存储过程使用'sp_'前缀。微软已经保留了这个前缀以供自己使用(参见*命名存储过程*)](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx),以及你将来有可能冒着名字冲突的风险。 [这对你的存储过程性能也是不利的](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)。最好只是简单地避免使用'sp_'并将其他内容用作前缀 - 或者根本没有前缀! – 2015-02-08 09:07:59

回答

0

可以声明或者你可以使用一个临时表

ALTER PROCEDURE sp_GetDetailsByUserId 
    @userId int 
    AS 
    BEGIN 
    SELECT usr.FirstName, usr.LastName, usr.UserName, usr.Email 
    FROM [User] usr 
    WHERE usr.UserID = @userId 

    declare @tbl table (the columns should be compatible with the result columns) 

    insert into @tbl 
    exec sp_GenerateRandomPass @userId // this result need to be inside a var 

END 

不是Temptable你可以这样做:

ALTER PROCEDURE sp_GetDetailsByUserId 
    @userId int 
    AS 
    BEGIN 
    SELECT usr.FirstName, usr.LastName, usr.UserName, usr.Email 
    FROM [User] usr 
    WHERE usr.UserID = @userId 

    create table #tempTable(the columns should be compatible with the result columns) 

    insert into #tempTable 
    exec sp_GenerateRandomPass @userId // this result need to be inside a var 

END 
0

你可以改变程序?具有输出参数可能是最好的,假设select始终只返回一行。

exec sp_GenerateRandomPass @userId, @password output 

输出参数的工作原理是这样的:

ALTER PROCEDURE sp_GenerateRandomPass 
@userId int, 
@password varchar (100) output 
AS 
BEGIN 
    -- Magic happens 
    set @password = 'xxxx' 
END 

其他选项是改变GenerateRandomPass是一个标量函数,你可以直接在你的程序将值分配给一个变量

而且,请不要在“sp_”前面加上你的过程前缀,它只适用于内置程序。

0

您需要修改sp_GenerateRandomPass,将此存储过程中的查询结果存储到temptable。查找更多关于temptable

临时表将在存储过程中访问。所以你可以使用它在sp_GetDetailsByUserId