流汗值之前,有一个奇怪的问题产生了一点存储过程,其需要执行其他几个存储特效的执行主select语句见下文之前得到一些值,SQL存储过程执行选择从其他特效
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_get_ApplicationUserServiceRoles]
@UserId int,
@ApplicationName varchar(50),
@ServiceName varchar(50)
AS
BEGIN
-----------------------------------------
SET NOCOUNT ON
-----------------------------------------
DECLARE @ApplicationId INT
exec @ApplicationId = dbo.usp_get_AppIdFromName @ApplicationName
DECLARE @ServiceId INT
exec @ServiceId = dbo.usp_get_ServiceIdFromName @ServiceName
SELECT
[RoleName]
FROM
[ServiceRoles] s
INNER JOIN
[ApplicationUserServiceRoles] r
ON
s.ServiceRoleId = r.ServiceRoleId
INNER JOIN
[ApplicationServices] p
ON
s.ServiceId = p.ServiceId
WHERE
r.UserId = @UserID
AND
r.ApplicationId = @ApplicationId
AND
s.ServiceId = @ServiceId
END
当我运行这个存储的proc时,它返回两个proc函数中的两个值,但不是实际的选择值。但是,当我运行select语句自己的值辅助存储过程返回它返回正确的数据。
任何想法是怎么回事,是在两个辅助存储过程之前运行的select语句,所以select语句没有得到正确的值?
在SQL 2005
感谢您的帮助,我将两个子过程转换为函数并且工作正常,再次感谢。 – Jon 2009-10-22 17:04:56
不完全如此,一个存储过程确实返回一个整数。返回错误状态等的理想选择,但也可以像函数一样返回一个整数值。在'函数'需要写入数据库的地方很有用。 – MatBailie 2009-10-24 22:42:47