powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добавить данные в таблицы со связями
17 сообщений из 17, страница 1 из 1
Как добавить данные в таблицы со связями
    #40089470
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 6 иерархически связанных таблиц, как одним запросом добавить данные в разные таблицы? таблицы связаны id -> Parent_id.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089471
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одним - никак.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089472
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,
а каким можно чтобы не нарушить иерархию?
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089473
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лтвин,

последовательно по шагам соблюдая FK constraint,
через определение авто-сгенерированного PK (identity) на предыдущем шаге.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089474
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vikkiv,

Ни слова не понял, я начинающий
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089475
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну на примере первых двух таблиц можете мне написать запрос на добавление данных? Дальше сам разберусь.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089493
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
set xact_abort on;
begin transaction;

   declare  @ids table(id primary key);

   insert Table1( id, ...)
     output inserted.id into @ids
     select ...
  ;

  insert Table2 ( id, patrentid, ...)
   select ..., patrentid = p.id from ... cross join @ids as p
 ;

commit transaction;
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089627
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению, всё может оказаться не так просто.
Например, если вы хотите вставить данные из нескольких таблиц (файлов, дерева xml, etc) связанных своими ключами master/detail в набор таблиц, тоже связанных master/detail, но уже со своим набором ключей, например - по identity или автогенерируемым sequential guid полям.

Тогда придется воспользоваться трюком с merge: https://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089629
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
К сожалению, всё может оказаться не так просто.
Например, если вы хотите вставить данные из нескольких таблиц (файлов, дерева xml, etc) связанных своими ключами master/detail в набор таблиц, тоже связанных master/detail, но уже со своим набором ключей, например - по identity или автогенерируемым sequential guid полям.

Тогда придется воспользоваться трюком с merge: https://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id


1. Ну чаво ты чайника запугиваешь?
2. Ерунда там написана. Достаточно Insert-а.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089632
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222

2. Ерунда там написана. Достаточно Insert-а.

Неа, не достаточно. Если старый ключ не вставляется в новую таблицу - его никак в output, используя insert, не вытащишь.
Поэтому только merge.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089637
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы исходите из предположения, что ключи непременно суррогатные. Это не всегда так и output выражение может не понадобиться в некоторых случаях.

Начинающему следует изучить - что такое в реляционной теории отношение, ключ, кортеж, атрибут, внешний ключ, нормальные формы, изучить способы поддержания целостности и так далее. Потом задавать вопросы.

Речь идёт, разумеется, не об "одном запросе", а об одной транзакции. Если не изучать синтаксис insert и update можно нафантазировать что угодно.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089668
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
aleks222

2. Ерунда там написана. Достаточно Insert-а.

Неа, не достаточно. Если старый ключ не вставляется в новую таблицу - его никак в output, используя insert, не вытащишь.
Поэтому только merge.

Если ты не умеешь - это вовсе не значит, что нельзя.

PS. Либо вставленных данных достаточно для идентификации, либо... пофиг.
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089701
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222
uaggster
пропущено...

Неа, не достаточно. Если старый ключ не вставляется в новую таблицу - его никак в output, используя insert, не вытащишь.
Поэтому только merge.

Если ты не умеешь - это вовсе не значит, что нельзя.

PS. Либо вставленных данных достаточно для идентификации, либо... пофиг.


Мда?
Ну вот пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Use tempdb
go

-- Исходные таблицы
Create table dbo.a(id_a int Not null primary key clustered)
Create table dbo.b(id_b int Not null primary key clustered, id_a int not null foreign key references dbo.a(id_a), b nvarchar(255))
Create table dbo.c(id_c int Not null primary key clustered, id_b int not null foreign key references dbo.b(id_b), c nvarchar(255))

insert into dbo.a(id_a) values (1), (2), (10), (100), (1000)
insert into dbo.b(id_b, id_a, b) values (1, 1, 'b1'), (2, 1, 'b1'), (10, 100, 'b3'), (100, 1000, 'b2'), (1000, 1000, 'b1')
insert into dbo.c(id_c, id_b, c) values (1, 1, 'c1'), (2, 1, 'c1'), (3, 100, 'c3'), (-2, 1000, 'c1'), (-1, 1000, 'c2')

-- Таблицы, в которые нужно перенести
Create table dbo.a1(id_a1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered)
Create table dbo.b1(id_b1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered, id_a1 uniqueidentifier not null foreign key references dbo.a1(id_a1), b nvarchar(255))
Create table dbo.c1(id_c1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered, id_b1 uniqueidentifier not null foreign key references dbo.b1(id_b1), c nvarchar(255))


Прошу, продемонстрируй, как вставить данные из верхних master/detail в нижнюю.
Используя insert (как это сделать используя merge - я знаю).
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089709
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SCOPE_IDENTITY() ?
@@IDENTITY ?
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089723
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, а можно по подробнее про тот скрипт что вы написали?
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089738
Лтвин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну или свести данные из этих таблиц в таблицу что то типа такого вида:

Id PId Level Name
---------------------------
1 null 0 Дивизия
2 1 1 Полк 1
3 1 1 Полк 2
4 2 2 Рота 11
5 4 3 Взвод 111
6 2 2 Рота 12
7 3 2 Рота 21
8 5 4 Отделение 1111
9 7 3 Взвод 211
...
Рейтинг: 0 / 0
Как добавить данные в таблицы со связями
    #40089775
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
aleks222
пропущено...

Если ты не умеешь - это вовсе не значит, что нельзя.

PS. Либо вставленных данных достаточно для идентификации, либо... пофиг.


Мда?
Ну вот пример:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Use tempdb
go

-- Исходные таблицы
Create table dbo.a(id_a int Not null primary key clustered)
Create table dbo.b(id_b int Not null primary key clustered, id_a int not null foreign key references dbo.a(id_a), b nvarchar(255))
Create table dbo.c(id_c int Not null primary key clustered, id_b int not null foreign key references dbo.b(id_b), c nvarchar(255))

insert into dbo.a(id_a) values (1), (2), (10), (100), (1000)
insert into dbo.b(id_b, id_a, b) values (1, 1, 'b1'), (2, 1, 'b1'), (10, 100, 'b3'), (100, 1000, 'b2'), (1000, 1000, 'b1')
insert into dbo.c(id_c, id_b, c) values (1, 1, 'c1'), (2, 1, 'c1'), (3, 100, 'c3'), (-2, 1000, 'c1'), (-1, 1000, 'c2')

-- Таблицы, в которые нужно перенести
Create table dbo.a1(id_a1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered)
Create table dbo.b1(id_b1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered, id_a1 uniqueidentifier not null foreign key references dbo.a1(id_a1), b nvarchar(255))
Create table dbo.c1(id_c1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered, id_b1 uniqueidentifier not null foreign key references dbo.b1(id_b1), c nvarchar(255))



Прошу, продемонстрируй, как вставить данные из верхних master/detail в нижнюю.
Используя insert (как это сделать используя merge - я знаю).



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @aa1 table(id_a1 uniqueidentifier Not null default NEWSEQUENTIALID() primary key clustered, id_a int not null );

insert @aa1(id_a) select id_a from a;

insert a1(id_a1) select id_a1 from @aa1;

insert b1(id_a1, b) select aa1.id_a1, b.b from b inner join @aa1 as aa1 on b.id_a = aa1.id_a;

-- в третью сам вставляй...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как добавить данные в таблицы со связями
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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