将执行过程结果保存到SQL Server 2008中的var
问题描述:
我有一个执行另一个过程的过程,我需要将结果保存到一个变量中。将执行过程结果保存到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
我是初学者,需要帮助。
谢谢。
答
可以声明表或者你可以使用一个临时表:
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
答
你可以改变程序?具有输出参数可能是最好的,假设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_”前面加上你的过程前缀,它只适用于内置程序。
答
您需要修改sp_GenerateRandomPass
,将此存储过程中的查询结果存储到temptable
。查找更多关于temptable。
临时表将在存储过程中访问。所以你可以使用它在sp_GetDetailsByUserId
你的意思是'var'。 'sp_GenerateRandomPass'过程是否返回表或什么? – 2015-02-08 07:49:36
备注:您应该**不要**为存储过程使用'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