2012-07-02 4 views
0

나는 SQL Server 2005에서 저장 프로 시저를 다음 쓴 나는 오류 메시지가 얻을 : 잘못된메시지 102, 수준 15, 상태 1,

메시지 102, 수준 15, 상태 1, 프로 시저 sp_InsertCustTrans, 라인 (12)
을 구문은 '@TrID'근처에 있습니다.

내 저장 프로 시저는 다음과 같습니다

ALTER PROCEDURE [dbo].[sp_InsertCustTrans] 
-- Add the parameters for the stored procedure here 
@CuID int, @TrType nvarchar(10), @TrAmt int 
AS 
BEGIN 
SET NOCOUNT ON; 
    declare @TrID int; 
    Select @TrID = MAX(TransactionID) from CustTrans; 
    if Isnull(@TrID) 
     @TrID = @TrID + 1 
    else 
     @TrID = 1 

-- Insert statements for procedure here 
if (@TrType = 'Deposit') 
    begin 
     INSERT INTO CustTrans (TransactionID, TransactionDate, CustID, TransactonType, CreditAmount) 
      Values(@TrID, GetDate(), @CuID, @TrType, @TrAmt); 
    end 
else 
    begin 
     INSERT INTO CustTrans (TransactionID, TransactionDate, CustID, TransactonType, DebitAmount) 
      Values(@TrID, GetDate(), @CuID, @TrType, @TrAmt); 
    end 
END 
GO 
+4

수동으로 ID를 증가시키는 것은 끔찍한 생각이며 경합 조건에 개방적입니다. 동기화 계획이 있다고 가정합니까? – ChaosPandion

답변

4

모든 할당 작업은 키워드 set 와야합니다.

Set @TrID = @TrID + 1 

또한 Ivan이 지적한대로 IsNull을 잘못 사용하고 있습니다. 올바른 사용법은 다음과 같습니다.

If @TrID Is Null 
+0

안내해 주셔서 감사합니다. –

+0

다른 값으로 확인할 수없는 문제가 있습니다 : If (@TrID = 'Deposit') 다른 조건으로갑니다. 이것에 대한 이유는 무엇입니까? –

+0

이 문제를 해결할 수 있습니다. 사실 그것은 내 편이 잘못되었습니다. 나는 그것을 확인하는 대신 값을 @TrID로 전달하고있었습니다. 그래서, 나는 'If (@TrID =='Deposit ')이되어야합니다. –

관련 문제