如何将主键值插入另一个表主键?

时间:2014-04-19 08:49:29

标签: sql-server tsql stored-procedures

我有sproc将执行插入到2个表中,第一个表主键将插入到地址表(将与其他5个表共享)作为地址ID,当我尝试提取联系人信息时我会参考特别的司机,学生..等等。 因为人们可能会说Scope_Identity,如果我只有2个表但是当我尝试插入地址scope_ Scope_Identity表学生或驱动程序时,我可能会遇到重复或主键违规。 任何想法如何去做能够插入驱动程序,学生..主键到地址表BE建议密钥将从窗口形式的文本框中插入或任何人可以建议如何去做这个操作以及如何改进sproc

bellow是我的sproc,因为没有设置标识列而失败

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,
--@AddressID 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

1 个答案:

答案 0 :(得分: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
    --@EscortID int,
    @FirstName varchar(50),
    @Surname varchar(50),
    @CrbCheck bit = 0,
    @CrbRef varchar(25) = false,
    @ExpiryDate date = null,
    @Training bit = false,
    @TrainingType bit = false,
    --@AddressID 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列替换为您要使用的数据类型

希望这有帮助!