0

.NET から Update ストアド プロシージャを実行します。T-SQL で次のロジックが必要ですが、これを行う方法がわかりません。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE sp_UpdateTable

    @TableID int,
    @StartTime1 datetime,
    @EndTime1 datetime

AS
BEGIN
    SET NOCOUNT ON;

    UPDATE [Table]
       SET [StartTime1] = WAS_PASSED_FROM_CODE(@StartTime1, @StartTime1, [StartTime1])
          ,[EndTime1]   = WAS_PASSED_FROM_CODE(@EndTime1,   @EndTime1,   [EndTime1])
    WHERE TableID = @TableID
END
GO

さて、私が基本的に探しているのは、パラメーターがコードから指定されたかどうかを判断する方法です (したがって、パラメーターがコードから指定された場合は WAS_PASSED_FROM_CODE)、その列を指定された値に更新します。既存の値)。

これは可能ですか?

この場合、コードが NULL を渡すことは有効であることに注意してください。その場合、列は NULL に更新する必要があります。

4

1 に答える 1

4

パラメータをデフォルトにしNULLてから使用しますISNULL。パラメータが指定されていない場合は、NULL

編集: NULL が有効な値であることを考えると、日付パラメーターが指定されているかどうかにかかわらず、marked に 2 つのパラメーターを追加します。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE sp_UpdateTable

    @TableID int,
    @StartTime1 datetime,
    @StartTime1Specified BIT,
    @EndTime1 datetime,
    @EndTime1Specified BIT

AS
BEGIN
    SET NOCOUNT ON;

    UPDATE [Table]
       SET [StartTime1] = (CASE WHEN @StartTime1Specified = 1 THEN @StartTime1 ELSE [StartTime1] END)
          ,[EndTime1]   = (CASE WHEN @EndTime1Specified = 1 THEN @EndTime1 ELSE [EndTime1])
    WHERE TableID = @TableID
END
GO
于 2012-06-26T20:20:59.723 に答える