【问题标题】:SQL Server : creating a procedure/trigger to create a new order for every type of another orderSQL Server:创建一个过程/触发器来为每个类型的另一个订单创建一个新订单
【发布时间】:2013-05-10 15:19:42
【问题描述】:

作为初学者,我正在寻求帮助,以便在每次出现另一个订单时尝试创建订单。

我在表dbo.OrderType 中有3 种订单类型,列OrderTypeID, OrderTypeName

OrderTypeID   OrderTypeName
---------------------------
     1        Assignment
     2        LoanRelease
     3        DocumentRetrieval

对于每个带有OrderTypeName = Assignment 的订单,我需要创建一个Order OrderTypeName = DocumentRetrieval

这是我认为我需要的表格,

dbo.tblOrder

列:OrderId, OrderTypeID, LoanNumberCustomerID

dbo.tblOrderActivity

列:OrderID, ActivityID, ActivityDate

dbo.tblActivity

ActivityID, ActivityName

ActivityID  ActivityName
------------------------
     1      Received
     2      Keyed
     3      Printed
     4      Delivered

dbo.tblCustomer

CustomerID, CustomerName

我相信我需要为此创建一个程序,因为它涉及为每个OrderOrderType = 1 创建一个新的OrderOrderType = 3,创建的每个新订单都必须具有received 或@ 987654338@。

有人可以帮我开始这个逻辑和过程吗?

这是我开始创建的触发器,但是由于语法错误,我无法执行它,并且仍然需要弄清楚如何不仅为每个订单创建新的 OrderOrderTypeID(3) OrderTypeID(1)

还要用ActivityID = 1创建一个新的OrderActivity

create trigger trg_Order ON dbo.tblOrder
AFTER INSERT
AS
BEGIN
UPDATE dbo.tblOrder
IF exists (select 1 from inserted where OrderTypeId = 1)
BEGIN
INSERT INTO dbo.tblOrder 
    SELECT OrderID,3,LoanNumber,CustomerID
    FROM inserted
    WHERE OrderTypeID = 1       
END
END

【问题讨论】:

  • 发布您所拥有的内容(即使其中包含错误),我们会尽力帮助您解决问题 :)
  • 我假设OrderOrderActivity 行应该是重复的。 ActivityOrderType 行显然不是。 Customer 有点模棱两可。您可能想要该表中的新行,或者您可能想要重新使用现有行(参数可以通过任何一种方式进行) - 您可以指定您想要的吗?
  • 是的,一个新的 Order(OrderID(autoincrement) 和 OrderTypeID(3)) 由 DocumentRetrieval 的 OrderTypeID 组成,为每个 OrderTypeID(1)"Assignment" 的订单创建。因此,正在创建的新订单将具有与其创建对象相同的 LoanNumber 和 CustomerID。因此,当与 OrderActivity 表相关时,OrderID 将是从正在创建的新订单创建的 OrderID,接收到的 ActivityID(1)。基本上为每个“assignment”类型的订单创建一个新的“DocumentRetrieval”类型的订单。

标签: sql sql-server tsql stored-procedures triggers


【解决方案1】:
create trigger trg_Order on dbo.tblorder
after insert
as
BEGIN
if exists ( select 1 from inserted where orderTypeId = 1)
    BEGIN
     insert into dbo.tblorder
    select OrderId,3,LoanNumber, customerid
    from inserted
    where OrderTypeId = 1

    insert into dbo.tblorderActivity
    select OrderId,1,sysdatetime()
    from inserted
    where OrderTypeId = 1
END
END

这是最终成功完成我需要的代码。

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 2019-10-27
    • 2020-12-06
    • 1970-01-01
    • 2015-12-20
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多