2017-06-22 5 views
0

私は2つのテーブル「ユーザー情報」と「ユーザーログイン」を持っていますが、両方ともID列を持ちますがユーザー情報テーブルのID列は、ユーザーログインテーブルのID列は、ユーザー情報テーブルのIDを参照します。値がストアドプロシージャ内の別のテーブルの列からの外部キー列を挿入します

これは、両方のテーブルに同時に値を挿入するストアドプロシージャです。

CREATE PROCEDURE [dbo].[InsertUser] 
@fname varchar(50), 
@lname varchar(50), 
@gender int, 
@bday date, 
@address varchar(max), 
@city varchar(50), 
@zip nvarchar(50), 
@country varchar(50), 
@status int, 
@telhome varchar(50), 
@teloff varchar(50), 
@mobile varchar(50), 

@login varchar(50), 
@pass varchar(50), 
@email varchar(50), 
@pin varchar(50) 

AS

INSERT INTO UserInfo 
(
Firstname, 
Lastname, 
Gender, 
Birthday, 
[Address], 
City, 
Zip, 
Country, 
Civil, 
HomeTelephone, 
OfficeTelephone, 
MobileTelephone) 

VALUES (@fname, @lname, @gender, 
@bday, @address, @city, @zip, @country, @status, @telhome, @teloff, @mobile) 

INSERT INTO UserLogin 
(
ID, 
[Login], 
[Password], 
Email, 
TransPIN 
) 
VALUES (***THE ID OF NEW UserInfo row**, @login, @pass, @email, @pin) 

私の問題は、私はユーザログインテーブルに挿入されるように、ユーザ情報テーブルに新しく挿入された行から生成されたIDを取得する必要があります。変数に

+0

"FROM inserted"メソッドを試しましたが、ここでは機能しません – ejmtv

答えて

2

割り当て最後に挿入されたID "SET @lastInsertedId = SCOPE_IDENTITY()" および第2のインサート文でこの変数を使用します。

CREATE PROCEDURE [dbo].[InsertUser] 
@fname varchar(50), 
@lname varchar(50), 
@gender int, 
@bday date, 
@address varchar(max), 
@city varchar(50), 
@zip nvarchar(50), 
@country varchar(50), 
@status int, 
@telhome varchar(50), 
@teloff varchar(50), 
@mobile varchar(50), 

@login varchar(50), 
@pass varchar(50), 
@email varchar(50), 
@pin varchar(50) 
AS 
DECLARE @lastInsertedId INT; 
INSERT INTO UserInfo 
(
Firstname, 
Lastname, 
Gender, 
Birthday, 
[Address], 
City, 
Zip, 
Country, 
Civil, 
HomeTelephone, 
OfficeTelephone, 
MobileTelephone) 

VALUES (@fname, @lname, @gender, 
@bday, @address, @city, @zip, @country, @status, @telhome, @teloff, @mobile) 

SET @lastInsertedId = SCOPE_IDENTITY() 

INSERT INTO UserLogin 
(
ID, 
[Login], 
[Password], 
Email, 
TransPIN 
) 
VALUES (@lastInsertedId, @login, @pass, @email, @pin) 
関連する問題