gpt4 book ai didi

sql-server - 更新时态表历史记录

转载 作者:行者123 更新时间:2023-12-02 20:05:37 24 4
gpt4 key购买 nike

我在更新 MS SQL Server 2016 中的时态历史记录表中的行时遇到问题。

根据文档,需要执行的步骤如下:

  1. 禁用系统版本控制
  2. 修改历史表
  3. 再次启用系统版本控制

我尝试创建一个执行此操作的过程,但收到此错误:

Msg 13561, Level 16, State 1, Line 23 Cannot update rows in a temporal history table 'db.dbo.FooHistory'.

这是我的 SQL:

CREATE TABLE Foo(
id int primary key not null
, title nvarchar(50) not null
, startTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL
, endTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL
, PERIOD FOR SYSTEM_TIME (startTime, endTime) )

ALTER TABLE Foo
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.FooHistory));

GO

CREATE PROCEDURE [dbo].[UpdateFooHistory] AS
BEGIN
SET NOCOUNT ON

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
ALTER TABLE dbo.Foo SET (SYSTEM_VERSIONING = OFF);

UPDATE dbo.FooHistory
SET title = 'Foo';

ALTER TABLE dbo.Foo SET (SYSTEM_VERSIONING = ON (
HISTORY_TABLE = dbo.FooHistory,
DATA_CONSISTENCY_CHECK = ON
));

COMMIT TRANSACTION

RETURN 0
END
GO

看起来 SQL Server 正在“编译时”而不是运行时检查表是否是临时的。这是真的?有办法解决吗?

最佳答案

将 UPDATE 语句更改为此,它将允许您创建过程:

EXEC(N'UPDATE dbo.FooHistory SET title = ''Foo''');

关于sql-server - 更新时态表历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46737825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com