存储过程语法错误

时间:2013-12-17 15:49:33

标签: sql-server sql-server-2008

我正在尝试创建一个通过网页更新我的SQL Server表的存储过程。

我正在尝试检查sql表以查看任何现有数据,如果是这样,则使用新数据更新表;否则将新数据插入表中。

但是当我尝试执行它时会返回以下错误:

  

Msg 102,Level 15,State 1,Procedure usp_TagNumberUpdate,Line 46
  '@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

1 个答案:

答案 0 :(得分:2)

您错过了SET关键字。必读:

SET @return = 'UPDATE COMPLETE'

如果没有SET关键字,则无法更改变量。

另外,如果您使用的是Microsoft SQL Server,MySQLSQL标记在那里做什么?我要删除它们。