更改存储过程不会影响输出

问题描述 投票:0回答:1

在提供的 SQL 过程的上下文中,我需要 myTable 中的

SCODE
列值为 0,无论 @TVP_m 表中存在什么值。

我已经尝试过了

INSERT INTO [ax].myTable
(
[AMOUNT],
[SUM],
[UNIT],
[ID],
[DATE],
[SCODE],                ----- The value type is INT
[TIME]

SELECT

[AMOUNT],
[SUM],
[UNIT],
[ID],
[DATE],
0,                      ----- The value type is INT
[TIME]

FROM @TVP_m AS Source;

但是仍然没有影响,表值是由临时表设置的

这是整个SP:

USE [RetailStore4567]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [crt].[INSERTDETAILS]
@Id           BIGINT,
@TVP_m          [crt].[myTABLETYPEV2]    READONLY
AS
BEGIN

SET NOCOUNT ON;

DECLARE @i_RC       INT;
DECLARE @i_T        INT;
IF @@TCOUNT = 0
BEGIN
BEGIN TRANSACTION;

SELECT @i_E = @@ER;
IF @i_E != 0
BEGIN
SET @i_RC = @i_E;
GOTO exit_label;
END;

SET @i_T = 1;
END;

-- Performming Insert into myTable

INSERT INTO [ax].myTable
(

[AMOUNT],
[SUM],
[UNIT],
[ID],
[DATE],
[SCODE], ---- The value type is INT
[TIME]) 

SELECT

[AMOUNT],
[SUM],
[UNIT],
[ID],
[DATE],
[SCODE], ----- The value type is INT
[TIME]
FROM @TVP_m AS Source;

SELECT @i_E = @@ERROR;
IF @i_E != 0
BEGIN
SET @i_RC = @i_E;
GOTO exit_label;
END;

IF @i_T = 1
BEGIN
COMMIT TRANSACTION;

SELECT @i_E = @@ERROR;
IF @i_E <> 0
BEGIN
SET @i_RC = @i_E;
GOTO exit_label;
END;

SET @i_T= 0;
END;

exit_label:

IF @i_T = 1
BEGIN
ROLLBACK TRANSACTION;
END;

RETURN @i_R;
END;


首先我需要知道为什么修改后的SP没有将值设置为0。 其次,有人可以提供有关如何修改代码以实现此要求的指导,确保 CODE 列始终初始化为 0 值。

sql sql-server sql-server-2008
1个回答
0
投票

修改存储过程中的 INSERT 语句以显式将 SCODE 值设置为 0。然后确保其余列从 @TVP_m 表正确映射:

USE [RetailStore4567]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [crt].[INSERTDETAILS]
@Id           BIGINT,
@TVP_m          [crt].[myTABLETYPEV2]    READONLY
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @i_RC       INT;
    DECLARE @i_T        INT;
    DECLARE @i_E        INT;
    
    IF @@TRANCOUNT = 0
    BEGIN
        BEGIN TRANSACTION;

        SELECT @i_E = @@ERROR;
        IF @i_E != 0
        BEGIN
            SET @i_RC = @i_E;
            GOTO exit_label;
        END;

        SET @i_T = 1;
    END;

    -- Performing Insert into myTable

    INSERT INTO [ax].myTable
    (
        [AMOUNT],
        [SUM],
        [UNIT],
        [ID],
        [DATE],
        [SCODE], -- The value type is INT
        [TIME]
    ) 
    SELECT
        [AMOUNT],
        [SUM],
        [UNIT],
        [ID],
        [DATE],
        0, -- Explicitly set SCODE to 0
        [TIME]
    FROM @TVP_m AS Source;

    SELECT @i_E = @@ERROR;
    IF @i_E != 0
    BEGIN
        SET @i_RC = @i_E;
        GOTO exit_label;
    END;

    IF @i_T = 1
    BEGIN
        COMMIT TRANSACTION;

        SELECT @i_E = @@ERROR;
        IF @i_E <> 0
        BEGIN
            SET @i_RC = @i_E;
            GOTO exit_label;
        END;

        SET @i_T = 0;
    END;

exit_label:

    IF @i_T = 1
    BEGIN
        ROLLBACK TRANSACTION;
    END;

    RETURN @i_RC;
END;
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.