【问题标题】:Create a SQL Trigger to alter multiple rows into another table?创建一个 SQL 触发器以将多行更改为另一个表?
【发布时间】:2020-02-10 06:15:40
【问题描述】:

我正在使用数据库来连接 PowerApps 和 PowerBI,但我对触发器有疑问。

我有一个包含三列的表(表 A):ID、TotalQty 和日期。我想创建一个基于三个主要行操作的触发器:插入、删除和更新。

示例:从 PowerApps 将新行插入表 A(ID = 1000000 & TotalQty = 3 & Date = Today)

这应该触发触发器 3 次以将行插入表 B(具有行 ID、QrderQty 和日期):

  1. ID = 1000000,OrderQty = 1 of 3,Date = Today
  2. ID = 1000000,OrderQty = 2 of 3,Date = Today
  3. ID = 1000000,OrderQty = 3 of 3,Date = Today

同样,如果在表 A 上更新了这一行的日期列,我也需要三个相应的行来更新它们各自的日期值。或者如果表A中的行被删除了,我需要删除这三行。

谁能给我一个示例查询?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

您需要先创建一个触发器,link 包含一些有关如何创建触发器的教程。

然后根据你的问题,你需要做一些循环来为 OrderQty 生成值,我在这个答案中做了一个while loop,它作为TSQL的一部分存在

假设您使用以下架构创建 TableATableB

create table [dbo].[TableA]
(
ID integer not null,
TotalQty integer not null,
Date Date not null
)
go
create table [dbo].[TableB]
(
ID integer not null,
OrderQty nvarchar(10) not null,
Date Date not null
)
go

您可以按如下方式创建触发器来为您完成这项工作:

CREATE TRIGGER [dbo].[InsertFromAToB]
ON [dbo].[TableA]
AFTER  INSERT
AS
BEGIN
Declare @counter as integer;
set @counter=1;
Declare @qty as integer;
set @qty = (Select TotalQty from inserted);
    While(@counter <= @qty)
    Begin
        Insert into TableB(ID,OrderQty,Date) select ID,(CONVERT(nvarchar(10),@counter) + ' of ' + Convert(nvarchar(10),@qty)) as OrderQty,Date From inserted
        set @counter=@counter+1;
    END
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多