触发条件

时间:2016-07-14 03:03:49

标签: sql-server

我在SQL Server中有一个名为DBSCM的数据库。我希望将'{1}}表中的'material'复制到ZMATPLANT表。

FILTER表:

ZMVCLAS

| valclas | indication | | 123 | MRO | | 442 | NO | 表:

ZMATPLANT

| valclas | material | | 123 | A02 | | 442 | B03 | 表应该是这样的:

FILTER

如您所见,表格已在| mn | | A02 | 列上关联。 过滤表中仅显示带有indication ='MRO'的'material'。

查询:

valclas

错误:

  

Msg 4104,Level 16,State 1,Procedure TR_zmatplant_INSERT,Line 10
  无法绑定多部分标识符“zmatplant.val_class”。

     

Msg 4104,Level 16,State 1,Procedure TR_zmatplant_INSERT,Line 10
  无法绑定多部分标识符“dbo.zmvclas.valcl”。

     

Msg 4104,Level 16,State 1,Procedure TR_zmatplant_INSERT,Line 11
  无法绑定多部分标识符“zmvclas.valcl”。

2 个答案:

答案 0 :(得分:0)

问题是您是否引用了尚未包含在查询中的表格。

我认为这会解决问题

<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">

</head>

<body>
  <div>
    This is a test page
    <p>
    <i class="material-icons">face</i>
    <i class="large material-icons">face</i>
    <i class="material-icons md-18">face</i>
    <i class="material-icons dark">face</i>
    </p>
  </div>
</body>

答案 1 :(得分:0)

我会提醒您,这是一个诱人但不恰当的使用触发器。诱人因为它看起来很自动,并且看起来像是面向对象的代码。不恰当,因为应保留触发器以强制执行参照完整性。

当用于数据一致性时,就像这里一样,它们不可避免地会导致问题。如果触发器遇到问题,它只能引发回滚(你没有做)。它提出的任何消息都是神秘且不受欢迎的,因为它缺乏关于用户正在做什么的上下文信息。除非在数据库中 ,否则它不能设计为有时回滚而不能回滚。它无法有效地报告,例如,zmvclas缺少相应的行,filter因此为空。

由于错误模式会快速增加,因此最好将问题限制为必须维护的内容,即参照完整性。 RI不需要任何用户上下文:数据错误,回滚是唯一合适的操作。

最好是将filter视为一种观点。如果它必须是表,请使用存储过程和事务来更新两个表。这样你就可以检查以确保你得到你所期望的,并引发用户可以理解的错误。