Манипуляция данными в связанных таблицах

taaamerlan
Дата: 26.01.2013 10:29:16
Mind, я делаю научную работу, которую еще год буду доделывать. Я думаю лучше сразу сделать более менее нормальную архитектуру БД, чем потом ее переделывать. Написанные велосипеды я быстро смогу переделать, когда узнаю, как нужно, а архитектуру БД нет
Cygapb-007
Дата: 26.01.2013 10:48:02
taaamerlan
Я создал две таблицы. Это таблицы пользователей. Одна таблица для авторизации и регистрации (т.е. там пароль, логин, емаил и конечно ID), а другая с личными данными и там тоже есть поле с ID. Они связанны по первичному ключу ID. Как теперь в них пихать данные? Как регистрировать в одной таблице пользователя, так чтобы сразу появлялась аналогичная по ID запись для второй таблицы? Полностью SQL Server изучать пока не могу. Сейчас все на великах делаю. Поможите?
один в один как - в посте 13721072
taaamerlan
Дата: 26.01.2013 11:05:12
Можно вопрос не по теме? Думаю у меня какая-то простая ошибка. Почему здесь в присваивании выбивает неверный синтаксис?
DECLARE @Inserted TABLE
(
		UserID INT  
)
DECLARE @InsID INT

INSERT Users 
OUTPUT INSERTED.UserID INTO @Inserted    
VALUES
           ('Tamrlan'
           ,'figsppam'
           ,'tm@gm.coom')
@InsID = @inserted.UserID
INSERT INTO [ps].[dbo].[UserInfo]
           ([UserID])
     VALUES
           (@InsID)              
GO
Cygapb-007
Дата: 26.01.2013 11:10:43
taaamerlan
Можно вопрос не по теме? Думаю у меня какая-то простая ошибка. Почему здесь в присваивании выбивает неверный синтаксис?
+
DECLARE @Inserted TABLE
(
		UserID INT  
)
DECLARE @InsID INT

INSERT Users 
OUTPUT INSERTED.UserID INTO @Inserted    
VALUES
           ('Tamrlan'
           ,'figsppam'
           ,'tm@gm.coom')
@InsID = @inserted.UserID
INSERT INTO [ps].[dbo].[UserInfo]
           ([UserID])
     VALUES
           (@InsID)              
GO
@Inserted - это таблица с тремя строками (после вставки в users)
taaamerlan
Дата: 26.01.2013 11:19:32
Cygapb-007, нет, в этой функции один столбец INSERTED.UserID (я даже проверил, хотя и так был уверен) и в этом столбце одна запись т.к. инструкцию мы выполнили один раз. Вот я и хочу эту запись присвоить скалярной переменной
@InsID = @inserted.UserID

но, видимо, это не так делаеться
taaamerlan
Дата: 26.01.2013 11:20:23
*делается
taaamerlan
Дата: 26.01.2013 11:26:30
что-то я часто опечатываюсь)
в этой таблице один столбец INSERTED.UserID (я даже проверил, хотя и так был уверен) и в этом столбце одна запись т.к. инструкцию мы выполнили один раз. Вот я и хочу эту запись присвоить скалярной переменной
@InsID = @inserted.UserID


но, видимо, это не так делается
Cygapb-007
Дата: 26.01.2013 11:46:50
--insert into slave (..)
select * from @inserted
Если же надо, по каким-то причинам, сохранить значение из таблицы в переменную, то надо помнить, что значения всех строк таблицы в одну переменную не записать никак.
Можно выдернуть из @inserted только одно (из трех) значение:
select top(1) @id=id from @inserted
и использовать его для вставки в slave, но тогда будут потеряны значения для остальных строк, добавленных в masters (в users)
Cygapb-007
Дата: 26.01.2013 11:51:36
taaamerlan
Cygapb-007, нет, в этой функции один столбец INSERTED.UserID (я даже проверил, хотя и так был уверен) и в этом столбце одна запись т.к. инструкцию мы выполнили один раз. Вот я и хочу эту запись присвоить скалярной переменной
@InsID = @inserted.UserID

но, видимо, это не так делаеться
Инструкцию выполнили один раз, но в самой инструкции мы могли бы добавить не одну а несколько строк, и все эти строки автоматически попали бы в @inserted - не надо использовать переменную, это место возникновения ошибок в дальнейшем.
Самое надежное - использовать вставку из таблицы, как это и сделано в исходном примере, не изобретайте кривых велосипедов:)
Cygapb-007
Дата: 26.01.2013 11:59:46
а, я понял в чем проблема
INSERT INTO [ps].[dbo].[UserInfo]
           ([UserID],field2,field3)
   select i.InsID, @value2, @value3
   from @inserted i