Отношение n:m

map4ela_
Дата: 13.05.2015 16:52:45
Всем привет , помогите отношение сделать правильно есть таблица "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) ,

)
Akina
Дата: 13.05.2015 17:06:31
А какие сложности-то? вводишь в остальные таблицы поле-ссылку на ID основной таблицы, и всё. Это если у тебя 1:n.

А если и вправду много-ко-много - то генеришь третью таблицу с парами (ID из первой - ID из второй).
xenix
Дата: 13.05.2015 17:07:23
И все бы хорошо, но в какие поля в text2 и text3 пихать это ФИО?
Konst_One
Дата: 13.05.2015 17:08:24
зачем вам туда пихать ФИО, вам надо только id прописать в таблицу линковки (см выше)
Penner
Дата: 13.05.2015 17:09:08
select text2.*, text.* from text2
left join text on text.id_text = text2.id_text
a_voronin
Дата: 13.05.2015 19:44:03
Попробовал вот такое извращение

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
map4ela_
Дата: 14.05.2015 15:53:32
a_voronin,

Спасибо , но при добавлении новой записи в таблицу text данные не переносятся в таблицу text2 text3 это если только в запросе заполнять
Владислав Колосов
Дата: 14.05.2015 16:19:02
map4ela_, так заполняйте процедурой, а не запросом.
a_voronin
Дата: 14.05.2015 16:31:37
map4ela_
a_voronin,

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


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

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

OUTPUT INSERTED.[id text] ...<остальные поля>... INTO #T
Konst_One
Дата: 14.05.2015 16:34:29
ТС видимо хочет вставлять всегда в одну таблицу и чтобы автоматом заполнялись 2-е другие, используя только INSERT. Тогда ему дорога в тригеры, но боюсь, что он этот путь не осилит.