【发布时间】:2019-02-11 10:06:18
【问题描述】:
我有一张带有TIMESTAMP 列的表格:
create table dbo.EX_EMPLOYEE (
NAME_X varchar(10) null,
RECORD_TIME_STAMP timestamp null
)
当我将行从一个表复制到另一个表时,使用:
SELECT * INTO EX_EMPLOYEE_T
FROM EX_EMPLOYEE
WHERE 1=0
或:
INSERT INTO EX_EMPLOYEE_T
SELECT *
FROM EX_EMPLOYEE
我收到此警告:
警告:用户不能将非空值插入
TIMESTAMP列。数据库时间戳值已被插入到TIMESTAMP字段中。
目标表中的TIMESTAMP 列替换为当前数据库时间戳。
我的问题
如何复制带有TIMESTAMP 列的行,同时保留源表中的TIMESTAMP 值?
(有没有类似SET IDENTITY ON/OFF的设置)
我的场景
我有 2 个表,一个用于“实时”数据,另一个用于“备份”,所以我需要复制带有 TIMESTAMP 完整的行。我需要它完好无损,以便检测“实时”行是否发生了变化。
【问题讨论】:
-
现在无法测试,但我认为 bcp 能够复制到时间戳列中
-
@PerformanceDBA 在我的问题中解释了创建表。 SELECT * INTO EX_EMPLOYEE_T FROM EX_EMPLOYEE WHERE 1=0 .. markp 提供的答案很好,但如果我在 insert INSERT INTO EX_EMPLOYEE_T SELECT * FROM EX_EMPLOYEE 中不指定列,则会导致警告
-
1) 所以指定列。 2) @markp 明确声明您不能使用 SELECT-INTO;您必须使用 INSERT-SELECT;必须指定列。 3) SELECT-INTO 无论如何都不是一件好事,在生产系统中是不可接受的。将其视为仅用于开发的便利。 4)你不想“禁用时间戳”,你想原封不动地复制它。