2011-11-21 3 views
0

.Net 응용 프로그램에서 작업하고 있습니다. 여기 aspx 페이지에서 탭 3, 즉 탭 1, 탭 2, 탭 3이 있습니다. 첫 번째 탭에는 텍스트 상자 컨트롤이 포함되어 있고 두 번째 탭에는 콤보 상자 컨트롤이 포함되어 있으며 세 번째 탭에는 일부 컨트롤이 들어 있습니다. 이 세 가지 탭 컨트롤을 모두 SQL 데이터베이스의 세 가지 다른 테이블에 저장하려고합니다. 이 경우 하나의 저장 프로 시저 만 사용해야합니다. FIRST 테이블의 PRIMARY KEY는 SECOND 및 THIRD 테이블에 저장해야합니다. (LIKE, REFERENTIAL INSERT). 여기에 내 SP가 있습니다 ...참조 삽입 - 저장 프로 시저 - SQL Server 2008

ALTER PROCEDURE [dbo].[Insert] 
(@Name NVARCHAR(50))   
AS 
BEGIN 
SET NOCOUNT ON 
DECLARE @TableOnePrimaryKey INT 

BEGIN 

INSERT INTO TABLEONE(Name) 
VALUES (@Name)    

SELECT @[email protected]@IDENTITY 
SELECT CAST(@@IDENTITY AS INT) 

INSERT INTO TABLETWO(TableTwoIDColumn) 
VALUES (@TableOnePrimaryKey) 

SELECT @[email protected]@IDENTITY 
SELECT CAST(@@IDENTITY AS INT) 

INSERT INTO TABLETHREE(TableThreeIDColumn) 
VALUES (@TableOnePrimaryKey)    

SELECT @[email protected]@IDENTITY 
SELECT CAST(@@IDENTITY AS INT) 

INSERT INTO TABLEFOUR(TableFourIDColumn) 
VALUES (@TableOnePrimaryKey) 

END 

그러나이 테이블의 기본 키는 다른 테이블에 저장되지 않습니다 이 문제를 해결하는 방법

답변

0

사용 scope_identity() 대신 @@identity. 값을 두 번 이상 @TableOnePrimaryKey에 할당하면 안됩니다. 다른 테이블에 ID 열이 있으면 첫 번째 삽입에서 가져온 ID를 잃어 버리게됩니다.

ALTER PROCEDURE [dbo].[Insert] 
(@Name NVARCHAR(50))   
AS 
BEGIN 
    SET NOCOUNT ON 
    DECLARE @TableOnePrimaryKey INT 

    INSERT INTO TABLEONE(Name) 
    VALUES (@Name)    

    SET @TableOnePrimaryKey=SCOPE_IDENTITY() 

    INSERT INTO TABLETWO(TableTwoIDColumn) 
    VALUES (@TableOnePrimaryKey) 

    INSERT INTO TABLETHREE(TableThreeIDColumn) 
    VALUES (@TableOnePrimaryKey)    

    INSERT INTO TABLEFOUR(TableFourIDColumn) 
    VALUES (@TableOnePrimaryKey) 

END 
0

신원보다 scope_identity를 사용하고 싶습니다. http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

"나중에 트리거 추가와 관련된 잠재적 인 문제를 방지하려면에서

, 항상 SCOPE_IDENTITY()를 사용하여 T SQL 문이나 저장 프로 시저의 최근에 추가 된 행의 ID를 반환 . "

시도해보고 문제가 해결되었는지 확인하십시오.

편집 : 나는 당신이 변수를 다르게 설정해야한다고 생각했다. 다음을 시도하십시오.

SET @TableOnePrimaryKey = (SELECT SCOPE_IDENTITY()) 
SELECT CAST(@TableOnePrimaryKey AS INT) 

등 등

관련 문제