首页 > 解决方案 > 在同一个表中将数据从一列复制到另一列会将原始列中的数据设置为空

问题描述

我创建了一个[LastLoginDate-NoTime]数据类型为 的新列Date。我已经有另一个数据类型[LastLoginDate]的列Datetime

具有值的列

我正在尝试使用此查询将值从LastLoginDate列复制到列:LastLoginDate-NoTime

UPDATE [dbo].[SapUsersExt] 
SET [LastLoginDate] = [LastLoginDate-NoTime]

但我遇到的问题是,当我执行此查询时,它将原始列中的数据设置为空。

屏幕截图:错误

我还尝试将LastLoginDate新列中的数据从日期格式转换为日期格式,LastLoginDate-NoTime以便我可以在我的应用程序中使用它。我该怎么做?

标签: sqlsql-server

解决方案


我正在尝试使用此查询将 LastLoginDate 列中的值复制到 LastLoginDate-NoTime 列

在这种情况下,您正在完全倒退- 您应该改用以下 SQL:

UPDATE [dbo].[SapUsersExt] 
SET [LastLoginDate-NoTime] = [LastLoginDate] 

第一列 - 紧随SET- 是您的值将写入的目标列。

符号之后的第二列=是数据的来源(列或表达式)。

你有它倒退 - 用实际值设置列,全部NULL......

这当然只适用于“一次性”更新 -当插入新数据时,这不会使您的列随着时间的推移保持同步。对于这种情况,您需要一个计算列

ALTER TABLE dbo.SapUsersExt
    ADD LastLoginDateOnly AS CAST(LastLoginDate AS DATE) PERSISTED;

或触发器。

或者,您甚至不需要实际存储该仅日期值 - 只需使用

SELECT
    CAST(LastLoginDate AS DATE), 
    .......

如果您需要仅日期值LastLoginDate


推荐阅读