2013-12-17 56 views
-1

我試圖創建一個存儲過程,通過網頁更新我的SQL Server表。存儲過程語法錯誤

我想要做的是檢查SQL表來查看任何現有的數據,如果是的話,更新表與新的數據;否則將新數據插入表中。

但是當我嘗試執行它返回此錯誤:

Msg 102, Level 15, State 1, Procedure usp_TagNumberUpdate, Line 46
Incorrect syntax near '@return'.

這裏是我的SQL代碼:

USE [ABCSystem] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[usp_TagNumberUpdate] 
@sONbr nvarchar(50) = NULL, 
@SOLine nvarchar(50) = NULL, 
@SerialNbr nvarchar(50) = NULL, 
@StatusCode nvarchar(50) = NULL, 
@PackType nvarchar(50) = NULL, 
@PalletID nvarchar(50) = NULL, 
@PackingListNo nvarchar(50) = NULL, 
@ItemCode nvarchar(50) = NULL, 
@CrDateTime nvarchar(50) = NULL, 
@CrUserID nvarchar(50) = NULL, 
@return nvarchar(50) = NULL OUTPUT 
AS 
BEGIN 
SET NOCOUNT ON; 

    SET @return = NULL 

    IF EXISTS(SELECT sONbr , SOLine 
       FROM [BCSystem].[dbo].[TAGNUMBERTEST] 
       WHERE sONbr = @sONbr AND SOLine = @SOLine) 
BEGIN 
    UPDATE [BCSystem].[dbo].[NEW_SO_TAG_NUMBERTEST] 
    SET  SerialNbr = @SerialNbr 
      ,StatusCode = @StatusCode 
      ,PackType = @PackType 
      ,PalletID = @PalletID 
      ,PackingListNo = @PackingListNo 
      ,ItemCode = @ItemCode 
      ,LastUpdDateTime = GETDATE() 
      ,LastUpdUserID = @CrUserID 

    WHERE sONbr = @sONbr AND SOLine = @SOLine 
    @return = 'UPDATE COMPLETE' 
END 

ELSE 
BEGIN 

    BEGIN TRY 
     BEGIN TRAN 

      INSERT INTO [ABCSystem].[dbo].[TAGNUMBERTEST] 
      (SONbr 
      ,SOLine 
      ,SerialNbr 
      ,StatusCode 
      ,PackType 
      ,PalletID 
      ,PackingListNo 
      ,ItemCode 
      ,CrDateTime 
      ,CrUserID) 
      VALUES 
      (@sONbr 
      ,@SOLine 
      ,@SerialNbr 
      ,@StatusCode 
      ,@PackType 
      ,@PalletID 
      ,@PackingListNo 
      ,@ItemCode 
      ,GETDATE() 
      ,@CrUserID) 

     COMMIT TRAN 

     RETURN ERROR_NUMBER() 
    END TRY 
    BEGIN CATCH 
     IF @@TRANCOUNT > 0 ROLLBACK 
     RETURN ERROR_NUMBER() 
    END CATCH 
END 
END 
+2

您是否意識到僅需一次插入即可開始事務是不必要的? –

回答

2

你缺少SET關鍵字。它必須是:

SET @return = 'UPDATE COMPLETE' 

如果沒有SET關鍵字,則無法更改變量。

請注意,如果您使用Microsoft SQL Server,那麼在那裏做MySQLSQL標籤是什麼?我要刪除它們。

+0

謝謝指出!我真的很想念那個地方。對於標籤= =「不方便」 – Alvan