用存储过程替换触发器

Replacing a trigger with a stored procedure

我正在尝试用存储过程替换触发器语句,因为在 Microsoft powerapps 中使用表时不允许启用触发器。

简化了,我要表:

目前,对于 KPI_Dim 中的每条新记录,我的触发器都会在 KPICurrent_Fact 中添加一个新行,其中包含 FK 和自动递增的 PK。其余列,例如KPI_Value 应该是空的。 我的简单触发器如下所示:

CREATE TRIGGER [dbo].[trg_insert_newKPI] 
ON [dbo].[KPI_Dim]
FOR INSERT AS
INSERT INTO KPICurrent_Fact (KPI_key)
SELECT KPI_ID
FROM INSERTED

现在,我想创建一个可以实现完全相同的存储过程。我试图自己找到一个解决方案,但我是存储过程的新手,找不到任何可以复制触发器的东西。

我正在使用 SSMS v.18.4。

感谢您的任何建议。

编辑

添加了 Table 创建和插入语句代码。

/* Create KPI_Dim table*/

CREATE TABLE [dbo].[KPI_Dim](
    [KPI_ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
    [KPIName] [varchar](200) NOT NULL,
    [KPIDescription] [varchar](500) NULL,
    [KPIGroup] [varchar](100) NOT NULL,
    [KPISubGroup] [varchar](100) NULL,
    [KPIOwner] [varchar] (50) NOT NULL,
    [DateCreated] DATETIME  NULL DEFAULT(GETDATE())
    )


  /* Example data */
INSERT INTO [dbo].[KPI_Dim]
    (
    KPIName, 
    KPIDescription,
    KPIGroup,
    KPISubGroup,
    KPIOwner 
    )
VALUES 
    ('TestKPIName','testtest','TestGroup', 'TestSubGroup', 'TestOwner');

您可以使用 OUTPUT 子句并插入到 table 变量中。从 table 变量,您可以插入事实 table.

CREATE TABLE [dbo].[KPI_Dim](
    [KPI_ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
    [KPIName] [varchar](200) NOT NULL,
    [KPIDescription] [varchar](500) NULL,
    [KPIGroup] [varchar](100) NOT NULL,
    [KPISubGroup] [varchar](100) NULL,
    [KPIOwner] [varchar] (50) NOT NULL,
    [DateCreated] DATETIME  NULL DEFAULT(GETDATE())
    )
CREATE TABLE dbo.KPI_Fact
(
 [KPI_ID] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL,
 [KPIDIMID] INT NULL FOREIGN KEY references [dbo].[KPI_Dim]([KPI_ID])
)

DECLARE @inserted table(KPI_DIMID INT)

INSERT INTO [dbo].[KPI_Dim]
    (
    KPIName, 
    KPIDescription,
    KPIGroup,
    KPISubGroup,
    KPIOwner 
    )
OUTPUT inserted.KPI_ID INTO @inserted
VALUES 
    ('TestKPIName','testtest','TestGroup', 'TestSubGroup', 'TestOwner');

INSERT INTO dbo.KPI_Fact([KPIDIMID])
SELECT * FROM @inserted
KPI_ID KPIDIMID
1 1