【发布时间】:2014-03-10 18:59:12
【问题描述】:
我有一个带有 2 个输出参数的存储过程,并希望使用 SQL 执行它,但在将它们分配给存储过程的结果时无法获取这些值。
简而言之,我有一个存储过程,它可以获取具有两个输出参数的登录用户的公司。一个是整数错误代码,另一个是公司名称。存储过程还返回公司所有其他用户的结果。
由于所有用户都将拥有相同的公司名称,我不想用另一个字段来膨胀响应,并认为最好将公司名称分配给一个变量,但不能让它正常工作。
我执行存储过程的 SQL 是:
DECLARE @parmRET1 VARCHAR(30)
DECLARE @parmRET2 int
EXECUTE CRUD_User @pvchAction = 'select',
@Id = '30862982-E189-4CE6-A299-5996D62DDCD5',
@pCompanyNameOut = @parmRET1 OUTPUT,
@pIntErrDescOut = @parmRET2 OUTPUT
SELECT @parmRET1 AS [output parameter], @parmRET2 AS [output parameter]
我的存储过程代码是:
alter PROC [dbo].[CRUD_User]
(
@Id varchar(400)=null,
@Name varchar(400)=null,
@Phone varchar(200)=null,
@PriceNotes varchar(max)=null,
@isActive bit= 0,
@pvchAction varchar(50)=null,
@pIntErrDescOut int output,
@pCompanyNameOut varchar(200) output
)
AS
BEGIN
if(@pvchAction='select')
begin
--EXEC @pCompanyNameOut = dbo.sel_Company_by_UserId @Id OUTPUT
SET @pIntErrDescOut = '3'; --works in getting output
EXEC @pCompanyNameOut = sel_Company_by_UserId @Id --not working
SELECT *
FROM aspnet_Users u
left outer join UserInfo ui on u.UserId = ui.userId
left outer join aspnet_Membership m on m.UserId = u.UserId
left outer join Company c on c.Id = ui.CompanyId
WHERE u.UserId = isnull(@Id, u.UserId) ;
RETURN
end
.....
IF (@@ERROR <> 0)
BEGIN
SET @pIntErrDescOut = 1
END
ELSE
BEGIN
SET @pIntErrDescOut = 0
END
END
当从 sel_Company_by_UserId 中提取存储的 proc sql 时,一切正常:
SET @pCompanyNameOut = (select Name
from Company C inner join UserInfo ui
on C.Id = ui.CompanyId
where ui.userId = '30862982-E189-4CE6-A299-5996D62DDCD5' )
但是当我想让 proc 返回相同时失败:
"EXEC @pCompanyNameOut = sel_Company_by_UserId '30862982-E189-4CE6-A299-5996D62DDCD5'
【问题讨论】:
-
什么是
sel_Company_by_UserId?一个函数?另一个存储过程? -
是的,它是 ms sql server,这是一个存储过程
-
@pCompanyNameOut是sel_Company_by_UserId中的输出参数还是返回值? -
这个过程没有多大意义你当前的代码说检查
@pvchAction='select'是否执行BEGIN..END块内的代码并返回。您的代码永远不会到达 @@ERROR 函数部分。此外,如果您在发生错误之后执行任何代码行,@@ERROR 会将其值重置为 null。 -
我能够通过提供的代码执行 proc,它运行选择部分中的部分,但无法为 @pCompanyNameOut 提供值 - 我如何才能将 comapny 分配给此参数?
标签: sql sql-server stored-procedures