Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Datetime  [new]
relief
Member

Откуда:
Сообщений: 1197
В таблице есть поле CreateDate
Нужно брать только новые записи из этой таблицы и вставлять в другую.
Новые записи можно определить только по CreateDate, оно сквозное для 2 таблиц.

сейчас планирую делать так:

maxdate
select maxdate = max date from table2

insert table 2
select * from table 1
where createDate > maxdate


вопрос.
насколько я понимаю, что может быть такая ситуация, что я взял записи из table1 и max create в table1 был 2015-01-06 10:47:08.260.
И уже после этого в эту же самую миллисекунду могут вставиттся данные в эту же таблицу?
Тогда вопрос знатокам, как не имея id получить новые записи? смотрю на вариант с уникальным индексом и игнором дубликатов, но там есть поле varchar(1000)((
27 янв 15, 16:47    [17178079]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
И уже после этого в эту же самую миллисекунду могут вставиттся данные в эту же таблицу?

"Эта же" - это table 1 или table 2 ?
27 янв 15, 16:50    [17178103]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
relief
насколько я понимаю, что может быть такая ситуация, что я взял записи из table1 и max create в table1 был 2015-01-06 10:47:08.260.
И уже после этого в эту же самую миллисекунду могут вставиттся данные в эту же таблицу?
Тогда вопрос знатокам, как не имея id получить новые записи? смотрю на вариант с уникальным индексом и игнором дубликатов, но там есть поле varchar(1000)((
Ничего непонятно. И при чём тут ещё ID и уникальные индексы?
27 янв 15, 17:14    [17178245]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
И уже после этого в эту же самую миллисекунду могут вставиттся данные в эту же таблицу?

"Эта же" - это table 1 или table 2 ?


могут вставиться в table1

2 alexeyvg
есть 2 идентичные таблицы. задача получить новые записи, которых есть в одной таблице и нет в другой.
новизну можно узнать по полю CreateDate (getdate())
27 янв 15, 17:37    [17178405]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
Glory
пропущено...

"Эта же" - это table 1 или table 2 ?


могут вставиться в table1

И как это может произойти пока вы выбираете данные из table1 ?
И какая вам разница, что после того, как вы выбрали данные из table1, туда добавили еще данных ?
27 янв 15, 17:42    [17178448]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
relief,

Можно использовать output выражение при вставке данных и сразу же заполнять вторую таблицу. Серверу совершенно безразлично значение полей и "новизну" по значениям сервер не определяет.
27 янв 15, 17:44    [17178457]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
relief
Тогда вопрос знатокам, как не имея id получить новые записи?

Чтобы избежать потерь при таком перетаскивании данных, выбирать данные надо по монотонно возрастающему уникальному ключу. Не имея такого ключа что-то получать проблематично.
27 янв 15, 17:48    [17178482]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
relief
2 alexeyvg
есть 2 идентичные таблицы. задача получить новые записи, которых есть в одной таблице и нет в другой.
новизну можно узнать по полю CreateDate (getdate())
insert table2
select * 
from table1 t1
where t1.createDate > (select max(t2.createDate) from table2 t2)
28 янв 15, 01:24    [17180163]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
пропущено...


могут вставиться в table1

И как это может произойти пока вы выбираете данные из table1 ?
И какая вам разница, что после того, как вы выбрали данные из table1, туда добавили еще данных ?


я плохо объяснил
вот есть таблица table1
я делаю выборку оттуда всех записей и вставляю в table2
на момент выборки max createDate = '2015-01-06 10:47:08.260'
всё. данные выбрались, селект закончен, И тут в table1 в эту же самую миллисекунду "2015-01-06 10:47:08.260" прилетают еще данные. Может такое быть?
Если Да, то в следующий раз, когда я буду выбирать по условию, которое предложил alexeyvg, я не получу последние вставленные записи

insert table2
select * 
from table1 t1
where t1.createDate > (select max(t2.createDate) from table2 t2)
28 янв 15, 08:49    [17180546]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
читайте про уровни изоляции
28 янв 15, 08:57    [17180560]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Добрый Э - Эх
Guest
relief,

0) зачем две одтнаковые таблицы, с одинаковым набором данных?
1) синхронизацию таблиц можно реализовать через MERGE
2) если первоначально работа идет с таблицей Т1, то может вместо второй таблицы использовать представление/обзор (VIEW) по первой таблице?
28 янв 15, 08:59    [17180567]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
aleks2
Guest
Гавриленко Сергей Алексеевич
relief
Тогда вопрос знатокам, как не имея id получить новые записи?

Чтобы избежать потерь при таком перетаскивании данных, выбирать данные надо по монотонно возрастающему уникальному ключу. Не имея такого ключа что-то получать проблематично.
28 янв 15, 09:00    [17180568]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
relief
Member

Откуда:
Сообщений: 1197
Knyazev Alexey
читайте про уровни изоляции


имеете ввиду, что другая транзакция будет иметь другие миллисекунды вставки?

2 Добрый Э - Эх
Server 2005 - merge нет
так сделано, т.к. вторая таблица только на чтение, а в первую идет активная вставка
28 янв 15, 09:34    [17180677]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
Glory
Member

Откуда:
Сообщений: 104760
relief
т.к. вторая таблица только на чтение, а в первую идет активная вставка

Ну так блокируйте ее пока выполняется insert select * from table 1 where createDate > maxdate.
28 янв 15, 09:36    [17180692]     Ответить | Цитировать Сообщить модератору
 Re: Datetime  [new]
relief
Member

Откуда:
Сообщений: 1197
Glory
relief
т.к. вторая таблица только на чтение, а в первую идет активная вставка

Ну так блокируйте ее пока выполняется insert select * from table 1 where createDate > maxdate.


set tran isolation level serializable ?
28 янв 15, 09:53    [17180783]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить