2

ID列である「タスク」というテーブルがあり'task id'ます。そのテーブルには、ストアドプロシージャを保存する必要があります。「タスクID」が指定されていない場合は値を挿入し、「タスクID」が指定されている場合は挿入する必要がありますテーブルを更新します。

タスクIDがID列である場合、これをどのように達成できるかは、誰でも例を挙げて説明できます。ここにコードがあります

Alter PROCEDURE TaskSave
(
@taskid int,   
@ProjectId int,
@EmployeeId int,
@TaskName nvarchar(50),
@Duration_Hrs int,
@StartDate nvarchar(20),
@FinishDate nvarchar(20),
@CreateUserId int,
@CreatedDate nvarchar(20),
@ModifiedUserID int,
@ModifiedDate nvarchar(20),
@Is_CommonTask bit
) AS

BEGIN
    IF Exists( select null from TblTasks where TaskId=@TaskId)
    BEGIN
        INSERT TblTasks
        VALUES (@ProjectId,@EmployeeId,@TaskName,@Duration_Hrs,
                @StartDate,@FinishDate,@CreateUserId,@CreatedDate,
                @ModifiedUserID,@ModifiedDate,@Is_CommonTask)
    END
    ELSE
    BEGIN
        UPDATE TblTasks SET 
        StartDate=@StartDate,FinishDate=@FinishDate,
        Duration_Hrs=@Duration_Hrs 
        WHERE TaskId=@TaskId
    END
END
GO
4

4 に答える 4

0

近いです。レコードが存在しないかどうかを確認して挿入を実行し、そうでない場合は更新します。次の関数を使用して、@TaskIdパラメーターを次のように宣言し、OUTPUT挿入時にそれを返すこともできます。SCOPE_IDENTITY()

ALTER PROCEDURE TaskSave(
    @TaskId INT = NULL OUTPUT
    , @ProjectId INT
    , @EmployeeId INT
    , @TaskName NVARCHAR(50)
    , @Duration_Hrs INT
    , @StartDate NVARCHAR(20)
    , @FinishDate NVARCHAR(20)
    , @CreateUserId INT
    , @CreatedDate NVARCHAR(20)
    , @ModifiedUserID INT
    , @ModifiedDate NVARCHAR(20)
    , @Is_CommonTask BIT
)
AS
BEGIN

    IF NOT(EXISTS(SELECT * FROM TblTasks WHERE TaskId = @TaskId))
    BEGIN
        INSERT INTO TblTasks(
            ProjectId
            , EmployeeId
            , TaskName
            , Duration_Hrs
            , StartDate
            , FinishDate
            , CreateUserId
            , CreatedDate
            , ModifiedUserID
            , ModifiedDate
            , Is_CommonTask
        )
        VALUES(
            @ProjectId
            , @EmployeeId
            , @TaskName
            , @Duration_Hrs
            , @StartDate
            , @FinishDate
            , @CreateUserId
            , @CreatedDate
            , @ModifiedUserID
            , @ModifiedDate
            , @Is_CommonTask
        )
        SET @TaskId = SCOPE_IDENTITY()
    END
    ELSE
    BEGIN
        UPDATE TblTasks SET 
            StartDate = @StartDate
            , FinishDate = @FinishDate
            , Duration_Hrs = @Duration_Hrs
        WHERE TaskId=@TaskId
    END
END
GO
于 2013-02-13T06:24:08.507 に答える
0

まず、入力変数 TaskID に以下のようなデフォルト値を与えてから、変数が NULL かどうかを確認します。そうであれば、新しい行を挿入します

Alter PROCEDURE TaskSave
(
@taskid int = NULL,   
@ProjectId int,
@EmployeeId int,
@TaskName nvarchar(50),
@Duration_Hrs int,
@StartDate nvarchar(20),
@FinishDate nvarchar(20),
@CreateUserId int,
@CreatedDate nvarchar(20),
@ModifiedUserID int,
@ModifiedDate nvarchar(20),
@Is_CommonTask bit
) AS

BEGIN

    IF @taskid IS NULL
    BEGIN
        INSERT TblTasks
        VALUES (@ProjectId,@EmployeeId,@TaskName,@Duration_Hrs,
                @StartDate,@FinishDate,@CreateUserId,@CreatedDate,
                @ModifiedUserID,@ModifiedDate,@Is_CommonTask)
    END
    ELSE
    BEGIN
        UPDATE TblTasks SET 
        StartDate=@StartDate,FinishDate=@FinishDate,
        Duration_Hrs=@Duration_Hrs 
        WHERE TaskId=@TaskId
    END


END
GO
于 2013-02-13T06:25:23.730 に答える
0

@taskidパラメータを NULL として宣言します。それがnullの場合は、そうでなければ更新を挿入します。下記参照。

Alter PROCEDURE TaskSave
(
@taskid int =NULL,   
@ProjectId int,
@EmployeeId int,
@TaskName nvarchar(50),
@Duration_Hrs int,
@StartDate nvarchar(20),
@FinishDate nvarchar(20),
@CreateUserId int,
@CreatedDate nvarchar(20),
@ModifiedUserID int,
@ModifiedDate nvarchar(20),
@Is_CommonTask bit
) AS

BEGIN
  if @taskid is null
  BEGIN
        INSERT TblTasks
        VALUES (@ProjectId,@EmployeeId,@TaskName,@Duration_Hrs,
                @StartDate,@FinishDate,@CreateUserId,@CreatedDate,
                @ModifiedUserID,@ModifiedDate,@Is_CommonTask)
    END
  ELSE
    BEGIN
        UPDATE TblTasks SET 
        StartDate=@StartDate,FinishDate=@FinishDate,
        Duration_Hrs=@Duration_Hrs 
        WHERE TaskId=@taskid
    END
END
GO
于 2013-02-13T06:41:48.307 に答える
0

このような場合、アイテムの挿入、更新、および削除が可能な一般的なストアド プロシージャを作成していました。大まかなパターンはこんな感じ

create procedure Modify_MyTable
  @Action char(1),
  @Data int,
  @PK int output
as
  if @Action = 'I' begin -- Insert
    insert into MyTable (Data) values (@Data)
    set @PK = Scope_Identity()
  end
  if @Action = 'M' begin -- Modify
    update MyTable set Data = @Data where PKID = @PK
  end
  if @Action = 'D' begin -- Delete
    delete MyTable where PKID = @PK
  end

これを使用したのはかなり前のことですが、1 つの SP にすべての操作コードがあり (もちろん 3 つ使用することもできました)、この手順でログ機能やその他の基本的なロジックを追加することもできたので、非常に便利であることがわかりました。

これが最良の方法であると言っているわけではありませんが、基本的なロジックを示す必要があります。

于 2013-02-13T07:28:10.283 に答える