2013-01-18 2 views
1

테이블이 있습니다. TableA입니다. 나는 TableA에 레코드의 삽입, 업데이트 또는 삭제에서 해고 TableB라고하는 다른 테이블에 레코드를 삽입하는 trigger을 만들었습니다. 이제 내가 어려움을 찾고있는 부분은 stored proceduresTableA입니다. scope_identity()inserted record입니다. 그것은 TableB에서 얻는 동안 TableA's 기록에서 반환되어야합니다. 이 문제를 해결할 방법이 있습니까? scope_identity()TableA에만, NOTTableB에서 원합니다. 귀중한 응답을 기다리고 있습니다. 사전에레코드가 삽입되는 기본 테이블의 ID를 선택하십시오.

감사합니다 ..

+0

SP 및 트리거 코드 – Raj

+0

을 게시하십시오. 드물지만 일반적으로 마지막으로 삽입 된 ID 인 TableA가 반환되어야합니다. – TechDo

+1

위와 같이하면 위의 코드는 "updation"이라고하지 않는 코드 – Jester

답변

1

SCOPE_IDENTITY()가 그 상황에서 작동합니다, 그것은 당신의 저장된 프로 시저 및 TableA의에 삽입, 트리거에서 수행하지 삽입에 범위되어야한다.

CREATE TABLE [dbo].[TableA](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [TestColumn] [nvarchar](50) NULL 
) ON [PRIMARY] 

CREATE TABLE [dbo].[TableB](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [TestColumn] [nvarchar](50) NULL 
) ON [PRIMARY] 

CREATE TRIGGER [dbo].[TableA_AIDU] 
    ON [dbo].[TableA] 
    AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
    SET NOCOUNT ON; 
    INSERT INTO TableB (TestColumn) 
    SELECT 'TableA Modified' 
END 

CREATE PROCEDURE [dbo].[sp_InsertToTableA] 
    @ID INT OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    INSERT TableA (TestColumn) 
    SELECT 'Insert from sp_InsertToTableA' 
    SET @ID = SCOPE_IDENTITY() 
END 

저장된 proc는 TableA에서 ID를 반환하고 TableB 삽입이 예상대로 트리거됩니다. SCOPE_IDENTITY() 대신 @@ IDENTITY를 사용하지 않으시겠습니까?

+0

고맙습니다 .. 대부분의 경우 @@ Identity()를 사용했지만 scope_identity()로 교체하는 것이 좋습니다. :) – Dev

+0

문제는 없지만 문서에서 몇 가지 새로운 것을 배웠습니다. http://msdn.microsoft.com/en-us/library/ms190315.aspx –

관련 문제