2017-10-23 2 views
0

InsertCity 데이터베이스에 도시 이름을 삽입하는 저장 프로 시저. 성공적으로 삽입 한 후 누가 수행했는지 기록하십시오 (insertlog 저장 프로 시저 사용). 이 단계는 원자 적이어야합니다.원자 저장 프로 시저의 오류

이 내 SQL 서버 코드입니다 :

ALTER PROCEDURE [paycom].[InsertCity] 
(
    @name nvarchar(50), 
    @employeeID int 
) 

AS 

Begin Atomic 

    SET NOCOUNT OFF; 
    declare @cityID int 

    INSERT INTO City (CityName) VALUES (@name) 
    select @cityID = Scope_IDentity() 
    exec InsertLog @employeeID, @name, @cityID 

    return @cityID 
End 

나는이 오류를 얻을 :

메시지 156, 수준 15, 상태 1, 프로 시저 InsertCity, 15 행 키워드 근처의 잘못된 구문을 '세트'. 메시지 102, 수준 15, 상태 1, 절차 InsertCity, Line 23 'End'근처의 구문이 잘못되었습니다.

어떤 아이디어가 있습니까?

원자를 시작하지 않으면 제대로 작동합니다!

답변

3

실제로 의미하는 것은 transaction과 적절한 오류 처리를 사용하는 것입니다.

그리고 값

SET NOCOUNT OFF; 
Declare @cityID int; 

Begin TRY 

    BEGIN TRANSACTION; 

    INSERT INTO City (CityName) VALUES (@name) 
    select @cityID = Scope_IDentity() 
    exec InsertLog @employeeID, @name, @cityID 

    COMMIT TRANSACTION; 

    SELECT @cityID; 
End try 
BEGIN CATCH 
    IF XACT_STATE() <> 0 
     ROLLBACK TRANSACTION; 
    THROW; 
END CATCH 

난 당신이 정말 메모리 OLTP 등

다음과 같은 옵션이 BEGIN ATOMIC에 필요한