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

Откуда: |:адуктО
Сообщений: 33
Всем привет , помогите отношение сделать правильно есть таблица "text" в не ее водим данные ФИО, телефон , адрес .
помогите сделать что бы запись переходила в следующие таблицы text2 и text3 , что бы не писать по 100 раз ФИО .
create database [text 1]
use [text 1]


create table text
([id text] int identity(1,1) not null primary key,
ФИО varchar(50),
Телефон integer,
Адрес varchar(50),
)

create table text2
([Номер_text2] int identity(1,1) not null primary key,
[id text] int null foreign key references text ([id text]),
[Сд1] varchar(50) ,
[Сд2] varchar(50) ,
[Сд3] varchar(50) ,
[Сд4] varchar(50) ,
[Сд5] varchar(50) ,
[Сд6] varchar(50) ,
)
create table text3
([Номер_text3] int identity(1,1) not null primary key,
[id text] int null foreign key references text ([id text]),
[Дс] varchar(50) ,
[ДС] varchar(50) ,
[Дс] varchar(50) ,
[Дс] varchar(50) ,
[Дс] varchar(50) ,
[Дс] varchar(50) ,
[Дс] varchar(50) ,

)
13 май 15, 16:52    [17635633]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
А какие сложности-то? вводишь в остальные таблицы поле-ссылку на ID основной таблицы, и всё. Это если у тебя 1:n.

А если и вправду много-ко-много - то генеришь третью таблицу с парами (ID из первой - ID из второй).
13 май 15, 17:06    [17635730]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
xenix
Guest
И все бы хорошо, но в какие поля в text2 и text3 пихать это ФИО?
13 май 15, 17:07    [17635736]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
зачем вам туда пихать ФИО, вам надо только id прописать в таблицу линковки (см выше)
13 май 15, 17:08    [17635746]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
Penner
Member

Откуда:
Сообщений: 338
select text2.*, text.* from text2
left join text on text.id_text = text2.id_text
13 май 15, 17:09    [17635750]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Попробовал вот такое извращение

INSERT INTO text2 ([id text] )
SELECT [id text]  FROM 
(
	INSERT INTO [TEXT] (ФИО,Телефон, Адрес) 
	OUTPUT INSERTED.[id text] 
	VALUES (N'Гарри Поттер', '423423', N'одлолдодл')
) A


Но получил

Msg 356, Level 16, State 1, Line 1
The target table 'text2' of the INSERT statement cannot be on either side of a (primary key, foreign key) relationship when the FROM clause contains a nested INSERT, UPDATE, DELETE, or MERGE statement. Found reference constraint 'FK__text2__id text__31EC6D26'.


Кто вам мешает выбрать scope_identity() и вставить его в последующие таблицы? Если несколько строк за раз, то можно вот так.

USE tempdb 
go 

create table text
([id text] int identity(1,1) not null primary key,
ФИО varchar(50),
Телефон integer,
Адрес varchar(50),
)

create table text2
([Номер_text2] int identity(1,1) not null primary key,
[id text] int null foreign key references text ([id text]),
[Сд1] varchar(50) NULL,
[Сд2] varchar(50) NULL,
[Сд3] varchar(50) NULL,
[Сд4] varchar(50) NULL,
[Сд5] varchar(50) NULL,
[Сд6] varchar(50) NULL,
)
create table text3
([Номер_text3] int identity(1,1) not null primary key,
[id text] int null foreign key references text ([id text]),
[Дс1] varchar(50) NULL,
[ДС2] varchar(50) NULL,
[Дс3] varchar(50) NULL,
[Дс4] varchar(50) NULL,
[Дс5] varchar(50) NULL,
[Дс6] varchar(50) NULL,
[Дс7] varchar(50) NULL,
)
GO 

create table #T
([id text] int)
GO
	INSERT INTO [TEXT] (ФИО,Телефон, Адрес) 
	OUTPUT INSERTED.[id text] INTO #T
	VALUES	(N'Гарри Поттер', '423423', N'одлолдодл'),
			(N'Дамблдор', '48923423', N'рлоролрло')


INSERT text2 ([id text] )
SELECT [id text] FROM #T

INSERT text3 ([id text] )
SELECT [id text] FROM #T

DROP TABLE #T
13 май 15, 19:44    [17636529]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
map4ela_
Member

Откуда: |:адуктО
Сообщений: 33
a_voronin,

Спасибо , но при добавлении новой записи в таблицу text данные не переносятся в таблицу text2 text3 это если только в запросе заполнять
14 май 15, 15:53    [17640437]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
map4ela_, так заполняйте процедурой, а не запросом.
14 май 15, 16:19    [17640665]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
map4ela_
a_voronin,

Спасибо , но при добавлении новой записи в таблицу text данные не переносятся в таблицу text2 text3 это если только в запросе заполнять


Я не понял, что за данные вы хотите переносить? Это таблицы с разными структурами. ID text перенесли, что ещё надо?

help по оператору OUTPUT прочтите наконец и допишите его

OUTPUT INSERTED.[id text] ...<остальные поля>... INTO #T
14 май 15, 16:31    [17640747]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
ТС видимо хочет вставлять всегда в одну таблицу и чтобы автоматом заполнялись 2-е другие, используя только INSERT. Тогда ему дорога в тригеры, но боюсь, что он этот путь не осилит.
14 май 15, 16:34    [17640773]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Konst_One
ТС видимо хочет вставлять всегда в одну таблицу и чтобы автоматом заполнялись 2-е другие, используя только INSERT. Тогда ему дорога в тригеры, но боюсь, что он этот путь не осилит.



У меня есть сильное подозрение, что триггер выдаст точно такой же матюг

Msg 356, Level 16, State 1, Line 1
The target table 'text2' of the INSERT statement cannot be on either side of a (primary key, foreign key) relationship when the FROM clause contains a nested INSERT, UPDATE, DELETE, or MERGE statement. Found reference constraint 'FK__text2__id text__31EC6D26'.
14 май 15, 17:39    [17641231]     Ответить | Цитировать Сообщить модератору
 Re: Отношение n:m  [new]
map4ela_
Member

Откуда: |:адуктО
Сообщений: 33
Konst_One,
Через хранимые процедуры точно не подойдет .
15 май 15, 17:58    [17646895]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить