在SQL中使用游标/循环的替代方法

ran兰

我想看看是否有任何方法可以在不使用游标或任何循环逻辑的情况下做我想做的事情。我有这两个桌子。FileRunData之间存在一对多关系Invoice,并且通过链接在一起RunId/FileRunId

CREATE TABLE [dbo].[FileRunData](
    [RunId] [uniqueidentifier] primary key,
    [Status] [varchar](25) NOT NULL,
    [IsEmailSent] [bit] NOT NULL
)

CREATE TABLE [dbo].[Invoice](
    [FileRunId] [uniqueidentifier] NULL,
    [InvoiceId] [uniqueidentifier] primary key,
    [InvoiceType] [varchar](20) NOT NULL,
    [Status] [varchar](25) NULL
)

我要针对以下情况发送电子邮件通知。

FileRunDataif中Status='Processed' and IsEmailSent=0,我必须检查Invoice中的所有行FileRunId,如果是Status is 'Invoiced',则必须发送电子邮件。

我的方法(将在此处使用光标)

  1. 从FileRunData中选择RunIds
  2. 对于每个RunId,从发票中获取该RunId的行数
  3. 获取具有Status ='Invoiced'的该RunId的行数
  4. 如果3&4相等,则发送电子邮件
Damien_The_Unbeliever

我认为,通过加上一些否定,这个问题更容易理解,除非我严重误解了您。我们希望发送电子邮件,如果有任何排Invoice它有一个状态Invoiced

SELECT frd.RunId
FROM FileRunData frd
WHERE frd.Status = 'Processed' AND
      frd.IsEmailSent = 0 AND
      NOT EXISTS (select * from Invoice i
                   where i.FileRunID = frd.RunID and
                         i.Status != 'Invoiced')

应该选择符合您条件的运行ID。不幸的是,如果您需要使用这些RunId值并为每个这样的结果发送一封电子邮件,那么不幸的是,在这一点上,您仍然必须使用游标1来处理该结果集并进行实际的sp_send_dbmail调用。


1或任何道德上等效的方式依次处理每一行。我通常只使用游标,但是有些人甚至不喜欢在SQL中出现该单词,例如,坚持创建临时表和while循环。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server游标循环替代

来自分类Dev

在SQL中的游标中使用游标-oracle

来自分类Dev

SQL中的游标替代

来自分类Dev

如何关闭for循环中使用的游标

来自分类Dev

在while循环中使用sleep()的替代方法?

来自分类Dev

我应该在SQL中使用每个循环/游标,还是在Java中使用常规的循环/游标?有什么更有效的?

来自分类Dev

如何在Oracle PL / SQL游标FOR循环中使用庞大的未命名列?

来自分类Dev

该游标的替代方法-SQL Server 2012

来自分类Dev

为什么在SQL Server中使用游标?

来自分类Dev

SQL Server:在函数中使用Exec的替代方法

来自分类Dev

使用游标进行循环

来自分类Dev

SQL Server中for循环的替代方法

来自分类Dev

我可以在sql游标中使用sql递归吗?

来自分类Dev

SQL Server:使用游标并导出XML文件的While循环

来自分类Dev

SQL Server:使用游标循环并插入增量值

来自分类Dev

Python DBAPI 游标与 SQL 游标相同吗?如果可以,如何提高性能?替代方法应该是什么?

来自分类Dev

使用循环使代码运行更快的替代方法

来自分类Dev

在SQL Server中使用游标生成随机ID

来自分类Dev

如何在Oracle中使用SQL游标属性

来自分类Dev

为什么在PL / SQl ORACLE中使用游标?

来自分类Dev

SQL Server更新循环/游标

来自分类Dev

在DB2 SQL游标中使用参数作为表名并添加两个游标

来自分类Dev

在LANGUAGE SQL中使用RAISE EXCEPTION语句的等效方法或替代方法?

来自分类Dev

在Tkinter中使用全局参数的替代方法

来自分类Dev

使用游标而不是While循环

来自分类Dev

使用动态SQL的游标

来自分类Dev

SQL替代For循环

来自分类Dev

在SQL Server的JOIN中使用的替代方法,可避免联接表中的重复列

来自分类Dev

在Android中使用游标对象

Related 相关文章

  1. 1

    SQL Server游标循环替代

  2. 2

    在SQL中的游标中使用游标-oracle

  3. 3

    SQL中的游标替代

  4. 4

    如何关闭for循环中使用的游标

  5. 5

    在while循环中使用sleep()的替代方法?

  6. 6

    我应该在SQL中使用每个循环/游标,还是在Java中使用常规的循环/游标?有什么更有效的?

  7. 7

    如何在Oracle PL / SQL游标FOR循环中使用庞大的未命名列?

  8. 8

    该游标的替代方法-SQL Server 2012

  9. 9

    为什么在SQL Server中使用游标?

  10. 10

    SQL Server:在函数中使用Exec的替代方法

  11. 11

    使用游标进行循环

  12. 12

    SQL Server中for循环的替代方法

  13. 13

    我可以在sql游标中使用sql递归吗?

  14. 14

    SQL Server:使用游标并导出XML文件的While循环

  15. 15

    SQL Server:使用游标循环并插入增量值

  16. 16

    Python DBAPI 游标与 SQL 游标相同吗?如果可以,如何提高性能?替代方法应该是什么?

  17. 17

    使用循环使代码运行更快的替代方法

  18. 18

    在SQL Server中使用游标生成随机ID

  19. 19

    如何在Oracle中使用SQL游标属性

  20. 20

    为什么在PL / SQl ORACLE中使用游标?

  21. 21

    SQL Server更新循环/游标

  22. 22

    在DB2 SQL游标中使用参数作为表名并添加两个游标

  23. 23

    在LANGUAGE SQL中使用RAISE EXCEPTION语句的等效方法或替代方法?

  24. 24

    在Tkinter中使用全局参数的替代方法

  25. 25

    使用游标而不是While循环

  26. 26

    使用动态SQL的游标

  27. 27

    SQL替代For循环

  28. 28

    在SQL Server的JOIN中使用的替代方法,可避免联接表中的重复列

  29. 29

    在Android中使用游标对象

热门标签

归档