将执行过程结果保存到SQL Server 2008中的var中

时间:2015-02-08 07:47:36

标签: sql sql-server sql-server-2008

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

我该怎么做?

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

我是初学者,需要帮助。

谢谢。

3 个答案:

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

答案 1 :(得分: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_”,它是用于内置程序的。

答案 2 :(得分:0)

您需要修改sp_GenerateRandomPass,将此存储过程中的查询结果存储到temptable。详细了解temptable

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

中使用它