当前位置: 首页 > 面试题库 >

在临时表中使用旧日期播种数据-SQL Server

白文彬
2023-03-14
问题内容

我需要在下面的临时表中为我的本地开发目的填充数据,开始日期应该是旧的。给定的表架构为

CREATE TABLE [dbo].[Contact](
    [ContactID] [uniqueidentifier] NOT NULL,
    [ContactNumber] [nvarchar](50) NOT NULL,
    [SequenceID] [int] IDENTITY(1,1) NOT NULL,
    [SysStartTime] [datetime2](0) GENERATED ALWAYS AS ROW START NOT NULL,
    [SysEndTime] [datetime2](0) GENERATED ALWAYS AS ROW END NOT NULL,
 CONSTRAINT [PK_Contact] PRIMARY KEY NONCLUSTERED 
(
    [ContactID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
    PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])
) ON [PRIMARY]
WITH
(
    SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[ContactHistory] , DATA_CONSISTENCY_CHECK = ON )
)

我需要在此表中插入一些过时的数据。

INSERT INTO dbo.Contact
(
    ContactID,
    ContactNumber,
    --SequenceID - this column value is auto-generated
    SysStartTime,
    SysEndTime
)
VALUES
(
    NEWID(), -- ContactID - uniqueidentifier
    N'9999912345', -- ContactNumber - nvarchar
    -- SequenceID - int
    '2017-09-01 06:26:59', -- SysStartTime - datetime2
    NULL -- SysEndTime - datetime2
)

我收到以下错误。

无法将明确的值插入表’DevDB.dbo.Contact’的GENERATED ALWAYS列中。将INSERT与列列表一起使用以排除GENERATED
ALWAYS列,或将DEFAULT插入GENERATED ALWAYS列。

请帮助我如何添加或更新旧dataed数据到这个 态表


问题答案:

终于我找到了解决方案

第1步 :需要切换它 关闭SYSTEM_VERSIONING

ALTER TABLE dbo.Contact SET (SYSTEM_VERSIONING = OFF);

步骤#2 :需要删除PERIOD FOR SYSTEM_TIME

ALTER TABLE dbo.Contact DROP PERIOD FOR SYSTEM_TIME

步骤#3 :插入要求的记录以及过去的日期

INSERT INTO dbo.Contact
(
    ContactID,
    ContactNumber,
    SysStartTime,
    SysEndTime
)
VALUES
(
    NEWID(), -- ContactID - uniqueidentifier
    N'1234567890', -- ContactNumber - nvarchar
    '2014-09-13 00:00:00', -- SysStartTime - datetime2
    '9999-12-31 23:59:59' -- SysEndTime - datetime2
)

步骤#4 :需要添加PERIOD FOR SYSTEM_TIME

ALTER TABLE dbo.Contact
ADD PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime])

步骤#5 :需要切换它 SYSTEM_VERSIONING

ALTER TABLE dbo.[Contact] SET (SYSTEM_VERSIONING = ON
 (HISTORY_TABLE=dbo.[ContactHistory],DATA_CONSISTENCY_CHECK=ON)
);

而已…



 类似资料:
  • 问题内容: 我有一个输出当前数据的现有查询,我想将其插入到Temp表中,但是这样做有一些问题。有人会对如何执行此操作有一些见解吗? 这是一个例子 这似乎当前以我需要的方式输出我的数据,但我想将其传递到临时表中。我的问题是我对SQL查询还很陌生,还没有找到一种方法来做到这一点。或者,即使有可能。如果不可能,是否有更好的方法将我要查找的数据获取到临时表中? 问题答案:

  • 我有一个输出当前数据的现有查询,我想将其插入到Temp表中,但这样做有一些问题。有人对如何做到这一点有一些见解吗? 这里有一个例子 这似乎以我需要的方式输出了我的数据,但我想将其传递到临时表中。我的问题是我对SQL查询很陌生,并且无法找到这样做的方法。或者如果可能的话。如果不可能,有没有更好的方法将我正在寻找的获取到临时表中?

  • 问题内容: 我有一列希望按日期时间分组而不创建新列。这可能是我当前的代码不起作用吗? 问题答案: 正如@JosephCottam所建议的 过时的用途 您可以将索引设置为并使用

  • 我有两个日期字段: 开始日期和结束日期和临时日期。 我有一个列表,其中我在开始日期和结束日期之间返回了6条记录。我如何过滤记录并返回最接近临时日期的日期时间? 在示例记录中,我需要获得第二条记录,因为与临时日期相近。实例

  • 在创建了临时表并声明了数据类型之后; 然后如何插入数据库中物理表中已保存的相关数据?

  • 问题内容: 为什么SQL Server坚持认为临时表已经存在!一个或另一个将会发生!,所以永远不会这样。 错误是:数据库中已经有一个名为“#temp1”的对象。 有没有解决这个问题的优雅方法?如果@checkvar为null,我要整个表,否则,只给我其中@checkvar =某物的值 编辑:该列是varchar,而不是int。 问题答案: 您不能只重写语句吗?