2014-04-19 80 views
0

我有sproc將執行插入到2表和第一個表主鍵將被插入到地址表中(這將與其他5個表共享),作爲地址id,當我嘗試將特定的聯繫信息司機,學生..等等。 人們可能會說Scope_Identity,如果我只有2個表,但是當我嘗試插入地址scope_ Scope_Identity的表學生或驅動程序時,我可能會得到重複或主鍵違例,這很好。 任何想法如何去做到這一點,以便能夠插入驅動程序,學生..等主鍵到地址表BE建議該鍵將從文本框中插入窗口形式或任何人可以建議如何去這樣操作,我該如何提高存儲過程我如何去主鍵值插入到另一個表主鍵?

波紋管是我的存儲過程,因爲沒有標識列未設置

USE [GlobalReachCare] 
GO 
/****** Object: StoredProcedure [dbo].[main_Escort_Insert] Script Date: 19/04/2014 09:07:28 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 

ALTER PROCEDURE [dbo].[main_Escort_Insert] 

-- Add the parameters for the stored procedure here 
@EscortID int, 
@FirstName varchar(50), 
@Surname varchar(50), 
@CrbCheck bit = 0, 
@CrbRef varchar(25) = false, 
@ExpiryDate date = null, 
@Training bit = false, 
@TrainingType bit = false, 
[email protected] int, 
@Address1 varchar(20), 
@Address2 varchar(20)= null, 
@Address3 varchar(20) = null, 
@City varchar(16), 
@PostCode varchar(16), 
@Email varchar(50) = null, 
@Telephone nvarchar(20), 
@DateOfBirth date= null, 
@NationalIN nvarchar(25) 
AS 
BEGIN 
DECLARE @Escort int 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

-- Insert statements for procedure here 
Insert Into dbo.tb_EscortsDetails(EscortId,FirstName,Surname, [CRB_Check], [CRB_Ref],ExpiryDate, Training, TrainingType) 
        VALUES(@EscortId,@FirstName,@Surname,@CrbCheck,@CrbRef,@ExpiryDate,@Training,@TrainingType) 

        set @Escort = SCOPE_IDENTITY() 


        insert into tb_Addresses(AddressID,Address1,address2,Address3,City,PostCode,Email,Telephone,DateOfBirth 
        ,NationalINO) 
        Values(@Escort,@Address1,@Address2,@Address3,@City,@PostCode,@Email,@Telephone,@DateOfBirth,@NationalIN) 
END 
+0

是否在tb_Addresses中使用了主鍵? –

+1

真的很難理解你在問什麼,你可以在表格和預期結果中顯示樣本數據嗎? – Tanner

回答

0

將失敗你自己給出了答案:

because no identity column is not set 

不幸的是,你不能添加一個身份創建完表後。嘗試放下桌子然後重新創建它們。你可以這樣做,因爲隨後

DROP TABLE tb_EscortsDetails 
GO 
CREATE TABLE tb_EscortsDetails (
    EscortID INT NOT NULL IDENTITY PRIMARY KEY, 
    FirstName NVARCHAR(50) NOT NULL, 
    Surname NVARCHAR(50) NOT NULL, 
    CRB_Check BIT NOT NULL, 
    CRB_Ref NVARCHAR(25) NOT NULL, 
    ExpiryDate DATE NOT NULL, 
    Training bit NOT NULL, 
    TrainingType bit NOT NULL 
) 

GO 
DROP TABLE tb_Addresses 
GO 
CREATE TABLE tb_Addresses (
    AddressID INT NOT NULL IDENTITY PRIMARY KEY, 
    EscortID INT NOT NULL, 
    Address1 NVARCHAR(20) NOT NULL, 
    address2 NVARCHAR(20) NOT NULL, 
    Address3 NVARCHAR(20) NOT NULL, 
    City NVARCHAR(16) NOT NULL, 
    PostCode NVARCHAR(16) NOT NULL, 
    Email NVARCHAR(50) NOT NULL, 
    Telephone NVARCHAR(20) NOT NULL, 
    DateOfBirth DATE NOT NULL, 
    NationalINO NVARCHAR(25) NOT NULL, 

    FOREIGN KEY (EscortID) REFERENCES tb_EscortsDetails (EscortId) 
) 

然後你就可以執行你的程序

USE [GlobalReachCare] 
GO 
/****** Object: StoredProcedure [dbo].[main_Escort_Insert] Script Date: 19/04/2014 09:07:28 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 

ALTER PROCEDURE [dbo].[main_Escort_Insert] 
    -- Add the parameters for the stored procedure here 
    [email protected] int, 
    @FirstName varchar(50), 
    @Surname varchar(50), 
    @CrbCheck bit = 0, 
    @CrbRef varchar(25) = false, 
    @ExpiryDate date = null, 
    @Training bit = false, 
    @TrainingType bit = false, 
    [email protected] int, 
    @Address1 varchar(20), 
    @Address2 varchar(20)= null, 
    @Address3 varchar(20) = null, 
    @City varchar(16), 
    @PostCode varchar(16), 
    @Email varchar(50) = null, 
    @Telephone nvarchar(20), 
    @DateOfBirth date= null, 
    @NationalIN nvarchar(25) 
AS 
BEGIN 
    DECLARE @Escort int 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    Insert Into dbo.tb_EscortsDetails(FirstName,Surname, [CRB_Check], [CRB_Ref],ExpiryDate, Training, TrainingType) 
    VALUES(@FirstName,@Surname,@CrbCheck,@CrbRef,@ExpiryDate,@Training,@TrainingType) 

    set @Escort = SCOPE_IDENTITY() 

    insert into tb_Addresses(EscortID,Address1,address2,Address3,City,PostCode,Email,Telephone,DateOfBirth,NationalINO) 
    Values(@EscortID,@Address1,@Address2,@Address3,@City,@PostCode,@Email,@Telephone,@DateOfBirth,@NationalIN) 
END 

一定要與您要使用

希望的數據類型這有助於更換您的CREATE TABLE列!

+0

Victor,你爲我節省了很多時間,因爲我完全忘記了外鍵,因爲我最近纔開始使用T-SQL。這正是我要感謝你的努力和時間 – Sudani

+0

沒問題!如果你願意,不要忘記標記我的評論作爲答案:) –

+0

嗨維克多作爲上述將工作正常,只有護送表,但如果我有另外4個表我需要在地址表中有一個外鍵每個人和我最終都會有一排空的外鍵,因爲護送,司機或學生將分開插入。我的意思是護送細節將插入從學生隔離司機細節分開。我在想的是一個列,它的值可以從其他4個sproc插入,類似於上面的sproc。 – Sudani

相關問題