2014-04-19 2 views
0

나는 두 테이블에 삽입을 수행 할 sproc을 가지고 첫 번째 테이블 기본 키는 주소 테이블 (다른 5 개 테이블과 공유 됨)에 삽입 될 것입니다. 주소 ID는 특정 연락처 정보를 가져 오려고 할 때 참조 할 것입니다. 운전사, 학생 등. 사람이 Scope_Identity라고 말할 수 있습니다. 2 테이블 만 있으면 괜찮지 만 주소를 입력하면 _ 학생 또는 드라이버의 Scope_Identity가 중복되거나 기본 키 위반이 발생할 수 있습니다. 드라이버, 학생 등을 삽입 할 수있는 방법에 대해 생각하는 방법을 생각해보십시오. 주소 표에 기본 키를 입력하십시오. 창 형식의 텍스트 상자에서 키가 삽입 될 것입니다. 또는 이동 방법에 대해 조언 할 수 있습니다.기본 키 값을 다른 테이블 기본 키에 삽입하는 방법은 무엇입니까?

because no identity column is not set 

:이 작업을 수행하는 방법과 내가 sproc에

울부 짖는 소리를 향상시킬 수있는 것은 당신이 대답을 직접 준 어떤 ID 열이

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

을 설정하지 않기 때문에 실패합니다 내 SPROC입니다 불행히도 ID를 생성해야합니다. 테이블을 떨어 뜨린 다음 다시 만들어보십시오. 프로 시저

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 열을 교체해야을 당신은 다음

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) 
) 

으로이 작업을 수행 할 수 있습니다 그리고 당신은 실행할 수 있습니다 !

+0

Victor, T-SQL 만 최근에 시작 했으므로 외래 키를 완전히 잊어 버렸기 때문에 시간을 많이 절약 할 수 있습니다. 이게 정확히 당신의 노력과 시간에 감사드립니다. – Sudani

+0

괜찮습니다! 만약 당신이 제발 대답으로 내 코멘트를 표시하는 것을 잊지 마세요 :) –

+0

안녕하세요 빅터는 위의 유일한 에스코트 테이블과 함께 잘 작동하지만 다른 4 테이블을 가지고 내가 주소 테이블에 외래 키가 필요합니다 각자와 나는 에스코트, 운전자 또는 학생이 따로 따로 삽입 될 것이기 때문에 1 개의 줄에있는 빈 외래 키를 갖는 것을 끝낼 것이다. 내가 말했듯이 에스코트 세부 사항은 학생들의 세부 사항을 seprate 드라이버 정보에서 seprate 삽입됩니다. 내가 생각했던 것은 위의 sproc과 비슷한 4 개의 다른 sproc에서 삽입 할 수있는 값이라는 열입니다. – Sudani

관련 문제