2011-12-05 51 views
1

我創建了一個插入存儲過程有兩個表所示:外鍵爲空當插入在exapmle使用存儲過程

表NameAge

CREATE TABLE [dbo].[Assignment3_NameAge] 
(
userID int PRIMARY KEY IDENTITY(1,1), 
Name varchar(255) NOT NULL, 
Age int NOT NULL 
) 

表嗜好

CREATE TABLE [dbo].[Assignment3_Hobbies] 
(
hobbiesID int Identity(1,1) Primary Key, 
userID int Foreign Key references Assignment3_NameAge(userID), 
hobbies varchar(255) NOT NULL, 
) 

插入存儲過程

CREATE PROCEDURE [dbo].p_Assignment3Join_ins 
     @Name    nvarchar(100), 
     @Age    int, 
     @Hobbies   nvarchar(100)     
AS 
INSERT INTO [TABLE].[dbo].[Assignment3_NameAge] 
      ([Name] 
      ,[Age]) 
VALUES (@Name,@Age) 

INSERT INTO [TABLE].[dbo].[Assignment3_Hobbies] 
      ([Hobbies]) 
VALUES (@Hobbies) 

問題是,當我運行存儲過程表愛好有一個空值的用戶名(外鍵)

我做錯了什麼?

+0

你正在使用什麼類型的數據庫(MSSQL,MySQL,Oracle等)? – Aaron

回答

1

你應該提供您要插入到Assignment3_HobbiesAssignment3_NameAge價值的關鍵。

如果你想插入的最後,你可以使用SCOPE_IDENTITY()從SQL Server(如果你使用SQL Server)或同等學歷。它會給你從最後插入的值Assignment3_NameAge

+4

切勿使用@@認同這一點。請改用scope_identity()或output子句。一旦有人向也具有身份並導致數據完整性問題的表添加觸發器,@@ identity將返回不正確的值。 – HLGEM

+0

@HLGEM - 修正:) – TheBoyan

1

我猜測這是一款基於IDENTITY列的SQL Server。正確?

第一插入創建用戶,但沒有對愛好的插入被設置沒有用戶ID。您需要從第一個插入中捕獲要在第二個插入中使用的標識值。你有沒有看過系統功能?

+1

我領先朝SCOPE_IDENTITY()函數,因爲這似乎是一個家庭作業,我試圖海報導致答案... –

1

你沒有爲它提供一個值,即使你創建了一個外鍵關係,SQL也不會爲你自動填充值。填寫表格是你的工作。