0

我将从 .NET 执行更新存储过程。我想要 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 是一个有效值,添加两个附加参数来标记是否指定了日期参数。

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 回答