次のストアド プロシージャが定義されています。
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);
誰かが私が間違っているかもしれないことを知っていますか?