Sql server 如何使用一个SQL Update命令设置开始日期和修改日期?

Sql server 如何使用一个SQL Update命令设置开始日期和修改日期?,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有一个简单的SQL Server表: CREATE TABLE [dbo].[UserTest] ( [UserTestId] INT IDENTITY (1, 1) NOT NULL, [UserId] INT NOT NULL, [ModifiedDate] DATETIME NULL, [StartedDate] DATETIME NULL ); 我这样设置修改日期: UPDATE UserTest SET

我有一个简单的SQL Server表:

CREATE TABLE [dbo].[UserTest] 
(
    [UserTestId]    INT      IDENTITY (1, 1) NOT NULL,
    [UserId]        INT      NOT NULL,
    [ModifiedDate]  DATETIME NULL,
    [StartedDate]   DATETIME NULL
);
我这样设置修改日期:

UPDATE UserTest
SET    ModifiedDate = @ModifiedDate
WHERE  UserTestId = @UserTestId
AND    UserId = @UserId

但是,如果
StartedDate
NULL
,是否有办法在同一SQL中将
StartedDate
设置为
@ModifiedDate

如果StartedDate不为NULL,则可以使用COALESCE语句将StartedDate设置为自身;如果为NULL,则使用@ModifiedDate

UPDATE UserTest
SET    ModifiedDate = @ModifiedDate,
       StartedDate = COALESCE(StartedDate, @ModifiedDate)
WHERE  UserTestId = @UserTestId
AND    UserId = @UserId

您也可以使用Case语句

UPDATE UserTest
SET    ModifiedDate = @ModifiedDate,
       StartedDate = CASE WHEN StartedDate IS NULL THEN @ModifiedDate ELSE StartedDate END
WHERE  UserTestId = @UserTestId
AND    UserId = @UserId

由于您使用的是SQL Server 2012,因此还可以使用
IIF

UPDATE UserTest
SET    ModifiedDate = @ModifiedDate,
       StartedDate = IIF(StartedDate IS NULL, @ModifiedDate, StartedDate)
WHERE  UserTestId = @UserTestId
AND    UserId = @UserId

您还可以选择使用
ISNULL

UPDATE UserTest
SET    ModifiedDate = @ModifiedDate,
       StartedDate = ISNULL(StartedDate, @ModifiedDate)
WHERE  UserTestId = @UserTestId
       AND    UserId = @UserId