流汗值之前,有一個奇怪的問題產生了一點存儲過程,其需要執行其他幾個存儲特效的執行主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