powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь копирование записей в две связанных таблицы из них же
13 сообщений из 13, страница 1 из 1
Нужна помощь копирование записей в две связанных таблицы из них же
    #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
Нужна помощь копирование записей в две связанных таблицы из них же
    #39682511
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linker_2004,

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

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

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

Недопонял, зачем новый id генерится.
Вроде бы f - это как-бы номер версии записи, так? Сделайте первичный ключ (id, f) и еще доп-поле isLastVersion, которое м.б 1 или 0
Это наверняка есть в тех ссылках от iiyama
...
Рейтинг: 0 / 0
Нужна помощь копирование записей в две связанных таблицы из них же
    #39682778
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linker_2004
в каждой таблице есть поля с датой начала и конца актуальности типа datetime
Если конец IS NULL вот вам и отличный признак последней версии. А все остальное - "орхив"
...
Рейтинг: 0 / 0
Нужна помощь копирование записей в две связанных таблицы из них же
    #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
Нужна помощь копирование записей в две связанных таблицы из них же
    #39682808
linker_2004
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотел без циклов с циклами наверное не комильфо) но такого рода замены будут не частыми, так что думаю пойдет
...
Рейтинг: 0 / 0
Нужна помощь копирование записей в две связанных таблицы из них же
    #39682956
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linker_2004,

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

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


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