Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь копирование записей в две связанных таблицы из них же / 13 сообщений из 13, страница 1 из 1
02.08.2018, 09:32
    #39682371
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
Здравствуйте!
Есть две таблицы:
1. id a1,a2,a3,a4,f
2. id b1,b2,b3,f
они связаны по id- идентификатор первой таблицы. f- поле типа int для определения актуальности записи
При каких либо изменениях запись инсертом копируется в таблицу с новым id и изменениями, а старая запись отправляется в архив с f=0
Возникла необходимость поменять значения в нескольких записях(здесь проблем нет), а вот как "отправить архив" из записи.
Как думал я:
1. копировать записи с первой таблицы в неё же по условию с f=2. Тут создаются новые id идентификатором-сделал
2. делать в них изменения-сделал

а тут подзавис, помогите чем можЫте)
3. затем копировать связанные записи из таблицы 2 в неё же с новым ID из таблицы 1
4. "отправить в архив" записи в обеих таблицах(f=0) и в созданных поменять f=1

USE base
DECLARE @STR NVARCHAR(MAX) SET @STR ='111'
--СОЗДАЮ НОВЫЕ ЗАПИСИ В ТАБЛИЦЕ 1
/*INSERT INTO Table1 (a1,a2,a2,a3,a4,f)
SELECT a1,a2,a2,a3,a4,'2'
FROM Book WHERE a1 LIKE '%'+@STR+'%'*/
...
Рейтинг: 0 / 0
02.08.2018, 12:20
    #39682511
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
linker_2004,

немного офф, видел много реализация SCD, но Ваша не самая удачная. Отслеживание версионности не должно влиять на первичный ключ и связи между таблицами.
Если хочется пилить свое, то посмотрите несколько паттернов здесь
или воспользуйтесь более новым , может это больше понравится
...
Рейтинг: 0 / 0
02.08.2018, 13:37
    #39682559
StarikNavy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
linker_2004,

архив - в отдельную таблицу
...
Рейтинг: 0 / 0
02.08.2018, 15:11
    #39682636
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
iiyamalinker_2004,

немного офф, видел много реализация SCD, но Ваша не самая удачная. Отслеживание версионности не должно влиять на первичный ключ и связи между таблицами.
Если хочется пилить свое, то посмотрите несколько паттернов здесь
или воспользуйтесь более новым , может это больше понравится
Спасибо. Почитаю. Забыл написать что в каждой таблице есть поля с датой начала и конца актуальности типа datetime
...
Рейтинг: 0 / 0
02.08.2018, 19:28
    #39682775
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
linker_2004,

Недопонял, зачем новый id генерится.
Вроде бы f - это как-бы номер версии записи, так? Сделайте первичный ключ (id, f) и еще доп-поле isLastVersion, которое м.б 1 или 0
Это наверняка есть в тех ссылках от iiyama
...
Рейтинг: 0 / 0
02.08.2018, 19:31
    #39682778
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
linker_2004
в каждой таблице есть поля с датой начала и конца актуальности типа datetime
Если конец IS NULL вот вам и отличный признак последней версии. А все остальное - "орхив"
...
Рейтинг: 0 / 0
02.08.2018, 20:24
    #39682806
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
Glebanskilinker_2004,

Недопонял, зачем новый id генерится.
Вроде бы f - это как-бы номер версии записи, так? Сделайте первичный ключ (id, f) и еще доп-поле isLastVersion, которое м.б 1 или 0
Это наверняка есть в тех ссылках от iiyama
f изначально и был только 0 и 1... немного коряво наверно и не так быстро, но зато работает.. кодить начал месяц назад.. За конструктивную критику отдельное спасибо.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
USE Base 
DECLARE @STR NVARCHAR(MAX) SET @STR ='КРУГ'  
DECLARE @STR1 NVARCHAR(MAX) SET @STR1 = 'КРУГ ТЕСТ' 
DECLARE @user NVARCHAR(15) SET @user='ТЕСТ'
DECLARE @curD DATETIME SET @curD='01.08.2018 15:05:29' 
DECLARE @I BIGINT SET @I=1
WHILE @I!=0
 BEGIN
	SELECT @I= (SELECT MIN(ID_NKN)FROM Book WHERE (IM LIKE '%'+@STR+'%')AND(FLAG_A='1'))
	INSERT INTO Table1 (a1,a2,a3,a4, ID_U,D_U,FLAG_A) 
	SELECT a1,a2,a3,a4,@user,@curD,'2'
	FROM Table1
	WHERE (ID=@I) AND (FLAG_A='1')
	INSERT INTO Table2(b1, b2, b3)
	SELECT  b1, b2, b3, @user, @curD,'2',@@IDENTITY
	FROM Table2
	WHERE ID=@I
	UPDATE Table1
	SET FLAG_A=0, D_E=@curD, ID_U=@user
	WHERE ID=@I
	UPDATE Table2
	SET FLAG_A=0, D_E=@curD, ID_U=@user
	WHERE ID_NKN=@I
 END;
UPDATE Table1 SET a1 = (SELECT REPLACE(a1, @STR, @STR1)) 
WHERE (a1 LIKE '%'+@STR+'%') AND (FLAG_A='2')
UPDATE Table1
SET FLAG_A = 1
WHERE FLAG_A=2
SELECT B.ID, B.a1,B.a2,,J.b1,J.b2,J.b3
FROM Table1 AS B LEFT JOIN Table2 AS J
ON B.ID=J.ID
WHERE (B.FLAG_A='1') AND (IM LIKE '%'+@STR+'%')
ORDER BY B.ID
...
Рейтинг: 0 / 0
02.08.2018, 20:26
    #39682808
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
хотел без циклов с циклами наверное не комильфо) но такого рода замены будут не частыми, так что думаю пойдет
...
Рейтинг: 0 / 0
03.08.2018, 10:41
    #39682956
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
linker_2004,

У меня вопрос, это для учебных целей или производственная задача?
...
Рейтинг: 0 / 0
03.08.2018, 14:06
    #39683104
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
iiyama,производственная. Учусь на ходу подсказывать не по содержанию базы кроме интернета толком некому. Пишу программу под существующую базу поля или таблицы добавить могу
...
Рейтинг: 0 / 0
03.08.2018, 14:08
    #39683107
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
но как и везде есть голос свыше и ему виднее как должно быть) и не волнуют сущности и прочая "ерунда") но компромиссы бывают
...
Рейтинг: 0 / 0
03.08.2018, 14:23
    #39683114
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
linker_2004,

В реальной жизни так делать нельзя, хотя бы потому что одновременно могут работать несколько человек.
Не надо придумывать свои грабли, для этих целей уже реализованы не то что грабли, а комбайны
...
Рейтинг: 0 / 0
04.08.2018, 21:59
    #39683357
linker_2004
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь копирование записей в две связанных таблицы из них же
iiyama, спасибо. Создал отдел отдельную таблицу в неё пихаю историю. Так действительно намного проще и быстрее
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь копирование записей в две связанных таблицы из них же / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]