【发布时间】:2021-10-22 13:47:47
【问题描述】:
今天我注意到我在 SQL Server 中的众多数据库之一有两个历史表,用于数据库中的所有系统版本表。
两个表的内容相似,但不相同。一个历史表的记录比另一个多。我试图关闭系统版本控制并重新打开。当我关闭它时,历史表消失(当然)。但是当我重新打开它时,我再次得到相同的两个历史表......?? 我用这个来试试这个:
ALTER TABLE ba SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE ba SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ba_his , DATA_CONSISTENCY_CHECK = ON ));
GO
奇怪的是,据我所知,它只发生在其中一个数据库上,但发生在该数据库中的所有系统版本表上。
我该如何纠正这种情况?我只想要一张历史记录表
===========
附加信息: 第二个历史表似乎属于另一个数据库。如果我使用 SSMS 上下文菜单查询历史表,它会显示不同的数据库:
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP (10000) [baID] ,[baTypeID] , etc...
FROM [esx100-1888888P].[dbo].[ba_his]
SELECT TOP (10000) [baID] ,[baTypeID] , etc...
FROM [esx100-1246890P].[dbo].[ba_his]
不知何故,另一个数据库的历史表显示在错误的数据库下面!这到底是怎么发生的?几周前我创建了数据库 esx100-1888888P。
我检查了数据库 esx100-1888888P,是的,它还显示了两个历史表。与其他数据库相同的表。不知何故,SQL-server 中的表数据库链接数据搞砸了。这是主数据库中的问题吗? – 肺气肿 3 分钟前
【问题讨论】:
-
这只是您的 SSMS 版本中的一个错误。获取最新的 SSMS 版本,这将是正确的。
-
当您关闭系统版本控制时,历史表不会被删除,它会变成一个“普通”表。当您查询
sys.tables where name='ba_his'或使用带有for system_time条件的ba表时,您会看到什么? -
您不应该在同一个架构中有两个不同的表,都称为
ba_his。当您查询他们时,查询是什么样的?如果您看到不同的结果,则表名必须有所区别 -
如果我查询 sys.tables 它只显示一个表: SELECT * FROM sys.tables where name='ba_his' 奇怪的是,如果我自己查询历史表,我会得到 75 条记录。如果我使用 SSMS 的上下文菜单查询 SSMS 中显示的两个表,一个表显示 67 条记录,另一个显示 75 条记录。但是SSMS生成的sql语句是完全一样的……!
-
你能区分 SQL 语句吗?也许名字中有一个零宽度空间或其他东西
标签: sql-server tsql temporal-tables sql-server-2017-express