Sql server 如何使用一个SQL Update命令设置开始日期和修改日期?
我有一个简单的SQL Server表: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
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