Tsql 需要帮助来写触发器吗
我有三张桌子: 订单:Tsql 需要帮助来写触发器吗,tsql,triggers,Tsql,Triggers,我有三张桌子: 订单: orderid、valuedid、valuesdsc 顾客: customerid,cutomdesc 小组: groupid,groupdesc valueid-客户或组的id valuesdsc-必须填写valueid说明,说明来自客户或组,具体取决于用户在客户机中选择的(客户或组) 因此,当客户端发送一个针对Orders的插入查询时,它包括新订单的orderid和valuedid。在客户端,我知道用户选择了什么:组还是客户 我需要的是:如果在订单中插入了新行,则在v
orderid、valuedid、valuesdsc
顾客:
customerid,cutomdesc
小组:
groupid,groupdesc
valueid
-客户或组的id
valuesdsc
-必须填写valueid
说明,说明来自客户
或组
,具体取决于用户在客户机中选择的(客户或组)
因此,当客户端发送一个针对Orders
的插入查询时,它包括新订单的orderid
和valuedid
。在客户端,我知道用户选择了什么:组还是客户
我需要的是:如果在订单
中插入了新行,则在valuesdsc
列中插入客户或组的valuesdsc
我有一个想法,可以插入新的订单记录
valuesdsc
,其中包含键-假值以选择正确的字典(客户或组),但不幸的是,我现在不知道如何创建触发器。首先,我必须说这是一个非常罕见的设计。将记录插入到订单
中时,使用valuesdsc
提示valueid
引用的表。但是一旦触发器填充了valuesdsc
,valueid
基本上就失去了任何意义。也就是说,您没有向我们透露您有任何其他方法来区分对客户的引用
和对组的引用
。因此,您可以完全删除valueid
,并使用valuesdsc
传递“dictionary”提示和该表中的引用
除此之外,由于valueid
可以引用多个表,因此不能对其使用约束
无论如何,在您目前的设计中,您可以尝试以下方法:
CREATE TRIGGER Orders_UpdateValuesdesc
ON Orders
FOR INSERT
AS
UPDATE o
SET valuesdesc = COALESCE(c.customdesc, g.groupdesc)
FROM Orders o
INNER JOIN inserted ON o.orderid = i.orderid
LEFT JOIN Customers c ON i.valuesdesc = 'Customers'
AND i.valueid = c.customerid
LEFT JOIN Groups g ON i.valuesdesc = 'Groups'
AND i.valueid = g.customerid
字符串'Customers'
和'Groups'
表示字典说明符。将它们替换为实际值
触发器使用左联接来联接
客户
和组
,然后用customdesc
或groupdesc
填充订单。安德烈,据我所知,在我们得到valuedesc之后,valueid是多余的,因为它失去了引用和关键意义?这促使我有了正确的想法。约翰尼:是的,没错valueid
在您知道哪个表是什么意思并且需要另一列时是有意义的。在您的例子中,valuesdesc
临时执行“另一列”,然后它获得自己的目标值--“再见,valueid”,并且valueid
具有一种愚蠢的外观,带有无意义的引用。