Попробуйте что-то вроде этого:
CREATE PROC dbo.user_Add(
@username VARCHAR(50),
@password NVARCHAR(50)
)
AS
BEGIN
-- username should be unique
IF NOT EXISTS(SELECT TOP 1 1 FROM Login WHERE username = @username) BEGIN
INSERT INTO Login (username, password)
VALUES (@username, @password)
RETURN @@IDENTITY
END
ELSE BEGIN
-- already taken username should be handled somehow
RETURN 0
END
END
CREATE PROC dbo.user_StudentAdd(
@loginID INT,
@name NVARCHAR(50),
@addr NVARCHAR(100)
)
AS
BEGIN
-- add new record for new student
-- probably before you should check if student is not already exist
INSERT INTO Student (LoginID, [Student Name], [Student address])
VALUES (@loginID, @name, @addr)
-- returns new StudentID, you can also use `RETURN` to return StudentId (if you need it)
SELECT @@IDENTITY
END
В качестве домашней работы вы можете написать третью хранимую процедуру, которая вызывает две вышеупомянутые процедуры и использовать результат из первой в вторую.Подсказка - используйте EXEC
, чтобы присвоить значение, возвращаемое хранимой процедурой (подробности: http://msdn.microsoft.com/en-us/library/ms174998.aspx).
Я не проверял его, поэтому он может потерпеть неудачу из-за неправильной орфографии. Также я никогда не использовал столбцыс пробелом внутри, поэтому я не уверен, как с ними справиться.
I предполагает , что:
- Пользователь (запись в таблице
login
) уже существует идоступно значение login.loginID
(пользователь уже вошел в систему). - Было проверено, что вошедшему в систему пользователю необходимо выполнить данные своих учеников.
Один больше - я бы не использовал имена столбцов с пробелами (или нелатинскими символами).