Как избежать обновления GETDATE () при каждом обращении к таблице [SQL Server 2014] - PullRequest
0 голосов
/ 01 июня 2018

Я использую SQL Server 2014. Я хочу создать столбец, который автоматически фиксирует время создания записи и сохранение этого значения.Я попытался использовать функцию GETDATE (), но я узнал, что это не может работать, поскольку это не является детерминированным.Цель состоит в том, чтобы использовать это значение для отслеживания самой новой записи в таблице.Я пытался сделать это, используя rowversion (timestamp), но я также не мог использовать это, так как в C # этот тип не реализует IComparer.Не могли бы вы предложить функцию или технику, которую я мог бы использовать.Я ценю всю помощь.Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Использование datetime для поиска самой новой записи в таблице не очень хорошая идея.В приведенном ниже примере все записи будут иметь одинаковое значение в поле ts

declare @t table (id int identity, name nvarchar(50), ts datetime default getdate())

insert @t (name) values ('item #1'),('item #2'),('item #3'),('item #4');

select * from @t

, чтобы найти последнюю вставленную / обновленную запись, вам следует использовать поле отметки времени.Вы можете конвертировать метку времени в bigint

declare @t table (id int identity, name nvarchar(50), ts datetime default getdate(), ts1 timestamp)

insert @t (name) values ('item #1'),('item #2'),('item #3'),('item #4');

select id, name, ts, cast(ts1 as bigint) as ts1 from @t
0 голосов
/ 01 июня 2018

Если вы делаете:

create table t (
    . . .
    createdAt datetime
);

insert into t( . . ., createdAt)
    select . . . , getdate();

Тогда дата вставки находится в столбце.

Если вы делаете:

create table t (
    . . .
    createdAt datetime default getdate()
);

insert into t( . . .)
    select . . . ;

Тогда у вас есть точно такое же поведение.

Если вам нужен столбец с текущей датой-временем, вы должны сделать:

create table t (
    . . .
    createdAt datetime default getdate(),
    cur_datetime as (getdate())
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...