在提供的 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 值。
修改存储过程中的 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;