Sql server 2005 在SQLServer2005中使用IF-THEN和GOTO

Sql server 2005 在SQLServer2005中使用IF-THEN和GOTO,sql-server-2005,Sql Server 2005,下面是一个存储过程,其中iam传递DriverID=0、DrivarCode=DD1和DriverName=Ram。 当执行控制将失败时。控制即将结束 如果((@DriverName!=NULL)和(@DriverCode!=NULL)),之后将失败。DriverName和DriverCode包含值。但仍将失败。原因可能是什么 Create Procedure InsertUpdateM ( @DriverID int, @DriverCode varchar(50),

下面是一个存储过程,其中iam传递DriverID=0、DrivarCode=DD1和DriverName=Ram。 当执行控制将失败时。控制即将结束 如果((@DriverName!=NULL)和(@DriverCode!=NULL)),之后将失败。DriverName和DriverCode包含值。但仍将失败。原因可能是什么

Create Procedure InsertUpdateM
(
    @DriverID int,
    @DriverCode varchar(50),
    @DriverName varchar(50),
    @Msg varchar(50) output
)

AS
BEGIN
IF @DriverID=0
    BEGIN
        SELECT DriverName,DriverCode FROM DriverM WHERE DriverName=@DriverName and DriverCode=@DriverCode
        IF(@@RowCount>0) GOTO Fails
            IF ((@DriverName!=NULL) and ((@DriverCode!=NULL))
                BEGIN
                    INSERT INTO DriverM(DriverCode,DriverName) values(@DriverCode,@DriverName)
                END
    END
ELSE
    BEGIN
        SELECT DriverName,DriverCode FROM DriverM WHERE DriverName=@DriverName and DriverCode=@DriverCode
        IF(@@RowCount>0) GOTO Fails
            IF ((@DriverName!=NULL) and ((@DriverCode!=NULL)
                BEGIN
                    UPDATE DriverM SET DriverCode=@DriverCode,DriverName=@DriverName WHERE DriverID=@DriverID
                END
    END
END

Fails
    SET @Msg='Failed'

我甚至不知道这段代码是如何解析的。在存储过程结束后,您有“Fails”,并且它不是以冒号结束的。您想要更像这样的内容:

ELSE
    BEGIN -- Begin 1
        SELECT DriverName,DriverCode FROM DriverM WHERE DriverName=@DriverName and DriverCode=@DriverCode
        IF(@@RowCount>0) GOTO Fails
            IF ((@DriverName!=NULL) and ((@DriverCode!=NULL)
                BEGIN -- Begin 2
                    UPDATE DriverM SET DriverCode=@DriverCode,DriverName=@DriverName WHERE DriverID=@DriverID
                END  -- End of 2
    END -- End of 1

GOTO Succeeds
Fails:
    SET @Msg='Failed'
Succeeds:
END -- End of SP

我甚至不知道这段代码是如何解析的。在存储过程结束后,您有“Fails”,并且它不是以冒号结束的。您想要更像这样的内容:

ELSE
    BEGIN -- Begin 1
        SELECT DriverName,DriverCode FROM DriverM WHERE DriverName=@DriverName and DriverCode=@DriverCode
        IF(@@RowCount>0) GOTO Fails
            IF ((@DriverName!=NULL) and ((@DriverCode!=NULL)
                BEGIN -- Begin 2
                    UPDATE DriverM SET DriverCode=@DriverCode,DriverName=@DriverName WHERE DriverID=@DriverID
                END  -- End of 2
    END -- End of 1

GOTO Succeeds
Fails:
    SET @Msg='Failed'
Succeeds:
END -- End of SP

您可以使用以下代码来实现它

Driverid:
    IF EXISTS(your query to check)
    BEGIN
        GOTO Driverid
    END

您可以使用以下代码来实现它

Driverid:
    IF EXISTS(your query to check)
    BEGIN
        GOTO Driverid
    END