我有一个执行另一个过程的过程,我需要将结果保存到变量中。
我该怎么做?
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 :(得分: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