1

次のストアド プロシージャが定義されています。

USE [BcmMetrice]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ActivityAdd_proc] @Name nvarchar(max),@Description nvarchar(max)  =null ,@Users nvarchar(max),@Object_id nvarchar (15) =null, @Source nvarchar(10)  =null, @TemplateId bigint  =null, @UserID bigint =null
AS


DECLARE activityUsers_cursor CURSOR FOR
select s from dbo.SplitString(@Users, ';')


DECLARE
@new_ActivityId bigint,
@new_CommentId bigint,
@activityUser_l bigint

BEGIN TRY

INSERT INTO [BcmMetrice].[dbo].[Activity]
           ([Name]
           ,[Description]
           ,[Type]
           ,[Created])
     VALUES
           (@Name
           ,@Description
           ,ISNULL(@TemplateId,0)
           ,GETDATE())

SET @new_ActivityId = (SELECT SCOPE_IDENTITY())

INSERT INTO [BcmMetrice].[dbo].[Comment] ([UserID],[CommentText],[Timestamp])
VALUES (ISNULL(@UserID,151),'Activity has been created',GETDATE())

SET @new_CommentId = (SELECT SCOPE_IDENTITY())

INSERT INTO [BcmMetrice].[dbo].[ActivityComment] ([ActivityID],[CommentID])
VALUES (@new_ActivityId, @new_CommentId)

INSERT INTO [BcmMetrice].[dbo].[Log]([Timestamp],[Type],[Data],[StackTrace]) VALUES (GETDATE(),'SQL.ActivityAdd_proc','users='+ISNULL(CAST(@Users as varchar(max)),'empty'),null)

OPEN activityUsers_cursor
FETCH NEXT FROM activityUsers_cursor INTO @activityUser_l
WHILE @@FETCH_STATUS = 0
    BEGIN

        INSERT INTO [BcmMetrice].[dbo].[Log]([Timestamp],[Type],[Data],[StackTrace]) VALUES (GETDATE(),'SQL.ActivityAdd_proc','Inserting users='+ISNULL(CAST(@activityUser_l as varchar(max)),'empty'),null)

        INSERT INTO [BcmMetrice].[dbo].[ActivityUser]
               ([ActivityId]
               ,[UserId]
               ,[Role])
         VALUES
               (@new_ActivityId
               ,@activityUser_l
               ,1)

        FETCH NEXT FROM activityUsers_cursor INTO @activityUser_l
    END

CLOSE activityUsers_cursor
DEALLOCATE activityUsers_cursor

END TRY

BEGIN CATCH

PRINT 'ERROR'
INSERT INTO [BcmMetrice].[dbo].[Log]([Timestamp],[Type],[Data],[StackTrace]) VALUES (GETDATE(),'SQL.ActivityAdd_proc','ERROR CATCHED!'+ERROR_MESSAGE(),null)


END CATCH

select @new_ActivityId

私がやりたいことは、プロシージャから新しく追加されたアクティビティの ID を返すことです。そのため、私は次の行を使用しています。

select @new_ActivityId

この手順を SQL Management Studio でテストすると、すべてが正常に機能しているように見えます。.NET プロジェクトでこの手順を使用しようとすると、問題が発生します。edmx モデル フォーム データベースを更新しましたが、この手順を実行すると戻り値が無効になります。

プロシージャの実行は次のようになります。

int ret = dc.Db.ActivityAdd_proc(name, description, users, object_id, source, templateId, userId);

誰かが私が間違っているかもしれないことを知っていますか?

4

1 に答える 1