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

Откуда:
Сообщений: 77
Добрый день.

Есть две талицы:

CREATE TABLE [dbo].[Table1] (
	[id1] [int] IDENTITY (1, 1) NOT NULL ,
	[Name1] [char] (10) NULL,
	[Descr1] [char] (10) NULL 
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[Table2] (
	[id2] [int] IDENTITY (1, 1) NOT NULL ,
	[fid1] [int] NULL ,
	[kol1] [char] (10) NULL ,
	[kol2] [char] (10) NULL 
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Table1] ADD 
	CONSTRAINT [PK_Table1] PRIMARY KEY  CLUSTERED 
	(
		[id1]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Table2] ADD 
	CONSTRAINT [PK_Table2] PRIMARY KEY  CLUSTERED 
	(
		[id2]
	)  ON [PRIMARY] 
GO

ALTER TABLE [dbo].[Table2] ADD 
	CONSTRAINT [FK_Table2_Table1] FOREIGN KEY 
	(
		[fid1]
	) REFERENCES [dbo].[Table1] (
		[id1]
	)
GO


Необходимо вставить следующие данные:
[Name1] = Вася
[Descr1] = Пупкин
[kol1] = Мен-р ,
[kol2] = Хороший.

Как это правильно вставить? Особенно интересует чтоб Table1.id1 попал в Table2.fid1.
Ну и чтоб работало при одновременной работе нескольких пользователей.
18 мар 08, 11:34    [5422751]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
babys
Member

Откуда: Москва, ВАО
Сообщений: 306
А что транзакции уже отменили ? :)
Старт транзакции
Вставка в первую -> получаем id1
Вставка во вторую
Конец транзакции
18 мар 08, 11:59    [5422959]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
CasperRUS
Member

Откуда:
Сообщений: 77
babys
А что транзакции уже отменили ? :)
Старт транзакции
Вставка в первую -> получаем id1
Вставка во вторую
Конец транзакции

Транзакции никто не отменял :)
вот переход "Вставка в первую -> получаем id1"
Вы имеете в виду Select id from "только что вставленная строка" по "некоему условию"? :)

На самом деле думал может как то красивее, чем через подзапрос, можно сделать.
18 мар 08, 12:25    [5423163]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
Anddros
Member

Откуда:
Сообщений: 1077
Копать здесь:

IDENT_CURRENT
@@IDENTITY
SCOPE_IDENTITY
18 мар 08, 12:58    [5423441]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
HTTP
Member

Откуда:
Сообщений: 8783
Anddros
Копать здесь:

IDENT_CURRENT
@@IDENTITY
SCOPE_IDENTITY

+1
18 мар 08, 13:12    [5423596]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
Ыукупф
Member

Откуда:
Сообщений: 36
Используйте таблицу INSERTED в OUTPUT
18 мар 08, 13:41    [5423826]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
CasperRUS
Member

Откуда:
Сообщений: 77
Спасибо всем, выручили.
19 мар 08, 11:15    [5428601]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в две таблицы  [new]
Layer.TM
Member

Откуда:
Сообщений: 90
CasperRUS
Спасибо всем, выручили.


Даешь решение в студию!!!
3 сен 08, 16:25    [6143048]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Вставка в две таблицы  [new]
SKM_1
Member

Откуда:
Сообщений: 1
Layer.TM
CasperRUS
Спасибо всем, выручили.


Даешь решение в студию!!!

Данной темой навеяло. Как протянуть IDENTITY в другую таблицу при вертикальном разбиении? Получилось что то для 2008
declare @s table (a int, b int) -- поле a должно пойти в @d1, поле b должно пойти в @d2. При этом должна появиться связь - id.
declare @d1 table (id int identity(1, 1) primary key, a int)
declare @d2 table (id int primary key, b int)

insert into @s (a, b)
select 1, 10 union all
select 2, 20 union all
select 3, 30

insert into @d2
select 
	id,
	b
from(
merge @d1 as d
using (select a, b from @s) as s (a, b)
on 0 = 1
when not matched then insert (a) values (a)
output inserted.id, s.b)
as ford2 

select * from @d1
select * from @d2
31 авг 12, 15:52    [13095906]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить