|
|
1
6
这种情况正是循环的优点(和设计目的)。
数据库旨在存储数据并对这些数据执行查询,以最方便的方式返回数据。 关系数据库可以以行集的形式返回数据。 游标(以及使用它们的循环)旨在保持一个稳定的行集,以便可以对其每一行执行一些操作。 这里的“事物”不是指纯粹的数据库技巧,而是指影响外部世界的真实事物,即数据库的设计目的,无论是在网页上显示表格、生成财务报告还是发送电子邮件。 将游标用于纯数据库任务(如将一个行集转换为另一个行行集)是不好的,但将它们用于您所描述的任务是非常好的。 基于集合的方法旨在在单个事务中工作。 如果您的设置基查询因某种原因失败,您的数据库将恢复到之前的状态,但您无法“回滚”已发送的电子邮件。如果发生错误,您将无法跟踪您的消息。 |
|
|
2
2
如果您需要每行一封电子邮件,则必须逐行操作。这不是一个标准的基于集合的行动。
我不会从触发器发送电子邮件顺便说一句:触发器执行时,您的交易是打开的 |
|
|
3
1
这不是最佳实践,但如果你想避免循环: 您可以创建一个“SendMails”表,在插入时使用触发器 从触发器内部调用sp_send_dbmail 然后你做:
|
|
|
4
1
在SQL Server Reporting Services中设置数据驱动订阅:-D 在我看来,这听起来像是SSRS的要求——TSQL本身并不是为报告而设计的。 |
|
|
5
0
实现这一点的最佳方法是将您的电子邮件发送逻辑放在用户定义的函数中。
它避免了循环,您甚至可以在更新语句中使用它来显示电子邮件已发送。例如: UDPATE MyTable SET SENT=MyEmailFunc(电子邮件地址)发送位置=0 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
Marc Guillot · 记录值时忽略冲突 1 年前 |
|
|
Fachry Dzaky · 正确使用ROW_NUMBER 1 年前 |
|
|
TriumphTruth · 从满足特定条件的数据集中选择1行 1 年前 |