0

あるストアド プロシージャを別のストアド プロシージャ内で呼び出していますが、何らかの理由で SQL Server が指定したパラメータを気に入りません。おそらく単純なものですが、なぜ気に入らないのかわかりません。

ストアド プロシージャ 1

USE [UserManagerTest]
GO
/****** Object:  StoredProcedure [dbo].[sp_UserManager_Log_User_Off]    Script Date: 11/19/2012 11:33:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================      
-- Author:    Nick Gowdy      
-- Create date: 13-11-2012      
-- Description:  Used by model is UserManager to filter data returned to code          
-- =============================================      
ALTER PROCEDURE [dbo].[sp_UserManager_Log_User_Off] 
                                           @userid           UNIQUEIDENTIFIER

AS 
  BEGIN 

 -- Get SessionID from UserID
 DECLARE @sessionid VARCHAR(60)
 DECLARE @userid uniqueidentifier
 select @userid = '61B08729-BB4F-426C-B20B-697F40F458C5'

 EXEC @sessionid = aspnet_Membership_Custom_GetUserSessionsByUserId @userid
 select @sessionid as sessionid

 -- Delete user session based on sessionid and userid
 EXEC aspnet_Membership_Custom_DeleteUserSession @sessionid, @userid
 END    

ストアド プロシージャ 2

USE [UserManagerTest]
GO
/****** Object:  StoredProcedure [dbo].[aspnet_Membership_Custom_GetUserSessionsByUserId]    Script Date: 11/19/2012 12:16:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO

ALTER PROCEDURE [dbo].[aspnet_Membership_Custom_GetUserSessionsByUserId]
    @UserId      uniqueidentifier
AS
BEGIN

declare @SessionId varchar(60)
select @SessionId = ( SELECT    
        [UserId]
    FROM    
        [dbo].[aspnet_Custom_UserSessionActivity]
    WHERE   
        [UserId] = @UserId)

        --select @SessionId

RETURN @SessionId
end

sp_usermanager_log_user_off を実行するとエラーが発生します

Msg 245, Level 16, State 1, Procedure aspnet_Membership_Custom_GetUserSessionsByUserId, Line 17
Conversion failed when converting the varchar value '61B08729-BB4F-426C-B20B-697F40F458C5' to data type int.

何か案は?ありがとう!

4

2 に答える 2

2

私の推測では、実際には関数が必要なときに手順を定義しました。

ストアドプロシージャは、エラーコードであるintを返します。あなたは何か他のもの(つまり、uniqueidentifier)を返そうとしていますが、それは機能していません。

手順を変更して、OUTPUTパラメーターを指定することもできます。

MSDNドキュメント(http://msdn.microsoft.com/en-us/library/ms187926.aspx):

ステータス値を呼び出し元のプロシージャまたはバッチに返し、成功または失敗(および失敗の理由)を示します。

于 2012-11-19T15:25:46.687 に答える
0

long または float を使用してください - その文字列は大きすぎて整数値に変換できない可能性があります

于 2012-11-19T15:19:59.743 に答える