Я хочу знать, как создать таблицу с системной версией, когда я хочу создать новую временную таблицу в SQL Server 2016?Временные таблицы SQL Server в 2016 году
2
A
ответ
3
От here:
Для того, чтобы сделать таблицу системообразующую версионируются таблицу, необходимо в следующее:
- Первичный ключ
- таблица вариант SYSTEM_VERSIONING быть установлен ON
- Два столбца DATETIME2(), не подлежащие обнулению, представляющие начало и конец периода действия строки
- Стартовый столбец должен быть помечен с помощью опции GENERATED ВСЕГДА КАК ROW СТАРТА
- Конца колонка должна быть помечена с помощью опции GENERATED ВСЕГДА КАК ROW END
- Обозначения колонн периода: СРОК ДЛЯ SYSTEM_TIME (,)
- Связанная История таблицы (которые SQL Server может создать для вас), чтобы держать прошлые состояния измененных строк
2
вы с относятся к этим двум ссылкам:
http://sqlwithmanoj.com/2015/06/15/temporal-data-support-in-sql-server-2016-part-1/
USE [TestManDB]
GO
CREATE TABLE dbo.Department
(
DepartmentID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
DepartmentName varchar(50) NOT NULL,
ManagerID int NULL,
ValidFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
ValidTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME (
ValidFrom,
ValidTo
)
)
WITH (SYSTEM_VERSIONING = ON); -- No History table name given here
GO
кредиты по ссылке выше для исходного кода.
0
Обращайтесь к образцам в how to create temporal tables in SQL Server в соответствии с каждым сценарием.
Простейшая форма создания новой таблицы SQL в качестве временной таблицы следующим образом
create table sampleTable (
IdColumn int identity(1,1) not null primary key clustered,
Code varchar(5),
CurrentValue varchar(100),
SysStartTime datetime2 Generated Always as Row Start Not Null,
SysEndTime datetime2 Generated Always as Row End Not Null,
Period for System_Time (SysStartTime, SysEndTime)
)
with (System_Versioning = ON)
Это создаст таблицу базы данных с именем sampleTable и соответствующей истории таблицы в текущей базе данных
1
Используя System_versioning = ON будет автоматически присваивать имя системной таблицы, но если вы хотите явно указать свою системную таблицу, как показано ниже
--create table or use existing table
CREATE TABLE [dbo].[table1](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](255) NOT NULL,
[updated_at] [datetime] NULL
)
GO
--Adding additional field for temporal tables
alter table dbo.table1
add start_time DATETIME2 generated always as row start hidden default sysutcdatetime()
,end_time DATETIME2 generated always as row end hidden default sysutcdatetime()
,period for system_time (start_time, end_time)
go
--enable system versioning
alter table dbo.table1
set (system_versioning = ON (history_table = dbo.table1_history))
go
спасибо @Japz для рефералов в моем сообщении в блоге. –
@ManojPandey, я нашел, что онлайн и поделился здесь :) идеальное сообщение в блоге для вопроса выше .. приветствую вас и благодарю вас за ваш пост. :) – Japongskie