2012-08-10 4 views
0

3 개의 테이블에 삽입해야하는 양식이 있습니다. 저장 프로 시저 (올바르지 않은)를 만들었습니다.ID를 사용하여 3 개의 테이블에 삽입 할 저장 프로 시저

3 테이블 :
1. dbo.Client CityID이 드롭 다운리스트에서 오는
2. dbo.Contact (AddressID, 의해 AddressLine1, ADD2는 을 CityID) (된 ClientID, CLIENTNAME은 을 AddressID). 테이블 정의와 일치하지 않는 열 이름 제공된 값의 개수 나 : 오류를 얻기
3. dbo.PointOfCContact (POCID, 이름, ...)

내 저장된 프로 시저

..

Create PROCEDURE sp_Clientdetails(
    @ClientName varchar(50), 

    @Addressline1 varchar(50), 
    @Addressline2 varchar(50), 
    @CityID INT, 

    @Firstname varchar(50), 
    @LastName varchar(50), 
    @Middlename varchar(50), 
    @Mob1 numeric(10,0), 
    @Mob2 numeric(10,0), 
    @Email1 varchar(50), 
    @Email2 varchar(50), 
    @phone varchar(50), 
    @Extention INT 
    ) 
AS 
DECLARE @AddressID int, @ClientID int, @POCID int; 

Set NOCOUNT OFF 

BEGIN TRANSACTION 

IF NOT EXISTS(Select 1 FROM dbo.Contact Where [email protected]) 
BEGIN 
    INSERT INTO dbo.Contact VALUES (@Addressline1, @Addressline2, @CityID); 
    SET @AddressID = SCOPE_IDENTITY(); 
    SET @CityID = SCOPE_IDENTITY(); 
END 
ELSE 
    Select AddressID = @AddressID From dbo.Contact Where [email protected]; 

IF NOT EXISTS(Select 1 FROM dbo.Client Where [email protected]) 
BEGIN 
    INSERT INTO dbo.Client VALUES (@ClientID, @AddressID, @CityID); 
    SET @ClientID= SCOPE_IDENTITY(); 
END 
ELSE 
    Select ClientID = @ClientID From dbo.Client Where ClientID = @ClientID; 

Insert into dbo.PointOfCContact VALUES (@Firstname, @LastName, @Middlename, @Mob1, @Mob2, 
@Email1, @Email2, @phone, @Extention); 
SET @POCID= SCOPE_IDENTITY(); 

COMMIT 

. INSERT INTO dbo.Contact VALUES (@Addressline1, @Addressline2, @CityID);

답변

1

당신은 당신의 열 이름을 지정해야합니다

INSERT INTO dbo.Contact (Address1, Adddres2, CityID) 
VALUES (@Addressline1, @Addressline2, @CityID); 

.... 

INSERT INTO dbo.Client (ClientID, AddressID, CityID) 
VALUES (@ClientID, @AddressID, @CityID); 

더 나은, 당신은 당신이 구조 테이블을 추가해야합니다 http://technet.microsoft.com/en-us/library/bb510625.aspx

+0

'INSERT INTO dbo.Contact (주소 1, Adddres2, CityID) VALUES (@ 의해 AddressLine1 @ Addressline2, @CityID); SET @AddressID = SCOPE_IDENTITY(); INSERT INTO dbo.Client (클라이언트 ID, 주소 ID, 도시 ID) VALUES (@ClientID, @AddressID, @CityID); ' U 이렇게하면 되겠습니까? – Girish

+0

@Girish 예. 모든 INSERT 문에 열 이름을 추가해야합니다. – podiluska

+0

감사합니다. 내가 너를 뽑았 으면 좋겠어 .. – Girish

0

MERGE 구문을 사용할 수 있습니다; 테이블 항목을 추가

INSERT INTO dbo.Contact (Address1, Adddres2, CityID) VALUES (@Addressline1, @Addressline2, @CityID); 
관련 문제