问题标签 [triggers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
1065 浏览

database-design - 在没有存储过程或触发器的情况下工作

在过去的 18 个月里,我们一直在研究复杂的数据库和客户端界面。我们会定期向此应用程序添加新功能,现在每天都有数十名用户在我们的所有办公室(包括站点和海外)使用。这只是为了告诉您它是一个带有 REAL 数据库的 REAL 应用程序。

到现在为止,我们仍然不用写任何存储过程,除了临时解决客户端版本和更新数据库模型之间的小问题(旧客户端版本不会正确更新新创建的字段,直到大家安装最新的版本)。

同样,我们仍然不需要任何触发器。事实上,唯一的 SP 和触发器是系统的,或者是为了复制目的而添加的。

当开发人员认为数据库优化必须反对数据库规范化时,我有一种奇怪的感觉,即 SP 和触发器主要用于补偿数据库设计默认值和/或试图绕过数据库设计规则。

问题是这些工具非常耗时(无论是开发还是维护)。然后每个开发人员都应该非常小心地使用它们,记住它们是在数据库中维护的最“昂贵”的项目。

我们是否可以认为在数据库中没有或只有很少的存储过程/触发器是其规范化水平和/或代码维护成本的一个很好的指标?

编辑:

你们中的一些人为使用触发器和 SP 提供了公平的论据。但我一直认为,大多数时候这些工具的使用方式不当或过度。设置了多少触发器来在表字段之间进行一些花哨的更新,或者重新计算总计或其他聚合数据?有多少 SP 用于构建用于报告问题的临时表?这是开发人员使用这些工具的许多情况中的两种,我认为这通常说明数据库设计/规范化缺陷。

其他一些人承认应该严格控制 SP 和触发器的使用。我也觉得很有必要。

我必须承认,我试图找到一些支持的论点,所有这些在我们其他数据库上工作的 SQL 极客都看不起我们,告诉他们的朋友“你知道吗?他们甚至不使用 SP 和触发器!哈哈!”

0 投票
6 回答
23401 浏览

mysql - 导致 INSERT 失败的触发器?可能的?

在清理这个答案时,我了解了一些关于TRIGGERMySQL 中的 s 和存储过程的知识,但令我震惊的是,虽然BEFORE INSERTBEFORE UPDATE触发器可以修改数据,但它们似乎不会导致插入/更新失败(即验证)。在这种特殊情况下,我能够通过以导致主键重复的方式操作数据来使其工作,这在这种特殊情况下是有道理的,但在一般意义上不一定有意义。

这种功能在 MySQL 中是否可行?在任何其他 RDBMS 中(我的经验仅限于 MySQL)?也许是THROW EXCEPTION样式语法?

0 投票
5 回答
9483 浏览

sql - 在 SQL Server 2005 上创建触发器需要 30 多分钟

在我们的实时/生产数据库中,我正在尝试向表中添加触发器,但没有成功。我尝试了几次,但是创建触发器语句完成需要 30 多分钟,我已经取消了它。

该表是一个经常由几个不同的进程读取/写入的表。我已禁用更新表的计划作业,并在表上的活动较少时尝试,但我无法停止访问表的所有内容。

我不相信 create trigger 语句本身有问题。create trigger 语句在测试环境中成功且快速,并且当向表中插入/更新行时,触发器可以正常工作。虽然当我在测试数据库上创建触发器时,表上没有负载并且它的行数要少得多,这与实时/生产数据库上的不同(100 对 13,000,000+)。

这是我试图运行的创建触发器语句

在更新行或有很多行时在表上创建触发器会不会有问题?

在 SQLServer 中,触发器的创建默认启用。是否可以创建默认禁用的触发器?

还有其他想法吗?

0 投票
4 回答
13663 浏览

tsql - 如何在 SQL 中取消删除

我想创建一个触发器来检查正在根据业务规则删除的内容,然后在需要时取消删除。有任何想法吗?

该解决方案使用了替代删除触发器。Rollback tran 停止了删除。我担心删除时会出现级联问题,但似乎没有发生。也许触发器不能自己触发。

0 投票
2 回答
96465 浏览

wpf - 列表框项目的 DataTemplate 中 IsSelected 的 WPF 触发器

我有一个列表框,并且我有以下 ItemTemplate :

如您所见,ContentControl 将 Visibility 设置为折叠。

我需要定义一个触发器,导致可见性设置为“可见”

选择 ListItem 时,但我无法弄清楚。

有任何想法吗?

更新:当然,我可以简单地复制 DataTemplate 并将触发器添加到有问题的 ListBox 以使用其中一个或另一个,但我想防止复制此代码。

0 投票
2 回答
7029 浏览

wpf - MouseOver 突出显示样式在一秒钟后返回默认值(由 Aero 引起?)

我试图设置我的 ComboBoxes 的样式以匹配 UI 的其余部分,但我遇到了 IsMouseOver 突出显示的问题。它以我指定的颜色突出显示一秒钟,然后淡出默认颜色,这是一种很酷的效果,但不是我想要的。这是我的风格:

我该怎么做才能使背景颜色保持不变?

0 投票
3 回答
562 浏览

sql-server-2000 - 从触发器执行 MS SQL Server 2000 DTS 包的最佳方法是什么?

我环顾四周,发现了一些关于如何做到这一点的想法,但没有明确的最佳方法。其中一个想法是使用 sp_start_job 启动运行 DTS 包的 SQL Server 代理作业。如果这是最好的方法,那么下一个问题将是,“如何从作业中安排 DTS 包并使其不再重复?”

谢谢,蒂姆

0 投票
1 回答
2172 浏览

sql-server - 更改 Sql Server 2005 中的触发器

我需要更改 sql server 2005 中的触发器,并且我想使用表适配器和 sql 语句来完成,而不是存储过程。我知道我可以在查询浏览器中运行它并执行它,但我需要在多个数据库中部署它并在更新中使用表适配器。这可能吗?

执行添加查询->更新->粘贴以下代码->查询生成器以查看它是否解析

错误... USE [DataBaseName] SQL 构造或语句不受支持。

如果我移除顶部并从 ALTER TRIGGER 开始

不支持 ALTER TRIGGER SQL 构造或语句。

我对此仍然很陌生,并且我要么以错误的方式进行此操作和/或没有存储过程就不可能做到这一点,我不会感到惊讶。

编辑:是的,我在 C# 中这样做。

谢谢。我可以从 ALTER TRIGGER 开始这样做,这将完成工作。

0 投票
6 回答
1838 浏览

sql-server - 外键引用复合表

我有一个表结构,我不确定如何创建最好的方法。

基本上我有两个表,tblSystemItems 和 tblClientItems。我有第三个表,其中有一列引用“项目”。问题是,此列需要引用系统项或客户端项——哪个都没有关系。系统项目的键在 1..2^31 范围内,而客户端项目的键在 -1..-2^31 范围内,因此永远不会有任何冲突。

每当我查询这些项目时,我都是通过在两个表的内容之间执行 UNION ALL 的视图来完成的。

因此,最佳情况下,我希望将外键引用作为视图的结果,因为视图将始终是两个表的联合 - 同时仍保持 ID 唯一。但我不能这样做,因为我无法引用视图。

现在,我可以删除外键,一切都很好。但是,我真的很想有一些参考检查和级联删除/设置 null 功能。除了触发器,还有什么方法可以做到这一点?

0 投票
1 回答
1479 浏览

oracle - 从 ADO.NET 使用并涉及触发器时的 Oracle 事务范围?

有人告诉我,当从 ADO.net 调用 Oracle 时,当在循环中调用多个插入时,每个插入都会触发一个触发器,该触发器在其 PL-Sql 中包含一个 Commit 语句,因此无法停止该提交实际提交事务。

即,我希望我的 ADO.Net 代码在循环开始之前开始一个事务,并且当循环退出时,仅当且仅当循环中的每个插入都成功时才提交所有插入。我的消息来源告诉我 Oracle 的工作方式,如果这些触发器包括 COMmit 语句,那么这是不可能的..

由于这似乎是一个非常普遍的要求,而且我知道它在 SQL Server 中是可能的,所以这对我来说似乎不正确。

它是否正确?