问题标签 [set-based]
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.
sql - 事件表的基于集合的计算,事件除外
我有一个表,其中包含更改维护服务状态的事件。这是一个数据样本:
在报告中,我需要显示在每个项目上花费的时间
基本上,我正在做这样的 DATEDIFF:
现在我必须实现一个新的状态。延迟和重新激活服务,但在计算花费在该服务上的总时间时不必考虑这些时间。
报告
对于任何项目,延迟和重新激活都可能发生多次。
我知道我可以用光标来做到这一点,但对我来说这似乎很老套,有没有办法在基于集合的方法上计算这个?
mysql - MySql:使用一长串复合 PK 对多行进行操作
鉴于我在与 ODBC 连接的客户端应用程序中有很长的键列表,那么在 MySql 中处理多行的好方法是什么?
注意:我的经验主要是 SQL Server,所以我知道一点,只是不是专门针对 MySQL。
任务是从 9 个表中删除一些行,但我可能有超过 5,000 个密钥对。
我从简单的方法开始,循环遍历我的所有键并针对每个表为每个键提交一个语句,例如:
除了,这是 45,000 个单独的语句,您可以想象这有点慢。
那么,不用担心我在前端使用的编程语言,有什么好方法可以提交列表,以便我可以一次或至少大批量加入并执行操作?到目前为止,这是我的想法:
创建一个临时表并插入其中,然后加入。我很乐意查找 MySQL 创建临时表的语法,但这是一条好路吗?
假设我确实使用了临时表,那么填充临时表的最佳方法是什么?5000 条
/li>INSERT Table VALUES ()
语句?SELECT 123, 456 UNION ALL SELECT 124, 457
? 我刚刚测试了 MySql 允许这种不针对表发出的 SELECT 。但是如果列表太长,SQL Server 最终会崩溃,那么这是 MySQL 的好方法吗?我应该一次将列表保持在几百个吗?.xml _ 我看到 MySQL 5.1 有一些 XML 函数,但是从粗略的搜索来看,它似乎不支持将一大块 XML 文本转换为要加入的行集。真的吗?将值转换为 XML 对我来说非常容易。
一个虚拟的拆分操作。我假设在 MySql 中可能存在某种程序语言。在 SQL Server 中,我可以编写一些自定义代码来解析字符串并将其转换为行集:
/li>
由于我不熟悉 MySQL,我真的不知道首先要调查哪种可能性,我希望能得到一些帮助,以免我做出错误的决定和/或艰难地学习。
sql - 在条件更新语句中使用 SUM
我一直在尝试搜索此内容,但不确定我是否使用了正确的术语。或者它可能只是它是不可能的。但我想要做的是更新表中构成总和值小于设定值的所有记录。
所以这里有一个例子:
现在我想要做的是更新所有等于总和小于 22 的记录。所以当我做总和时,id 1 和 2 将等于 20,小于 22。但它也只需要记录处理日期为空。我也希望它能够工作,以便它从最旧更新到最新。
基本上这是我用伪代码编写它的方式:
但我知道这是行不通的。所以我希望一些SQL大师可能有想法。
我确信我可以在光标内写这个,但我想知道是否有基于集合的方法来执行这个。
编辑:我更新了下面的表格和简要说明,以更好地描述我的情况。
.net - 基于集合的执行;SQL 和 .NET
在 SQL 中,应该始终争取基于集合的操作与基于迭代的操作(即循环)。在 .NET 中,我们经常循环集合和对象。.NET 中是否有任何命令允许基于集合的处理或一切都基于迭代?(我想起了如何遍历结果集中的每条记录的DataAdapter.Fill
调用)。DataReader
我不是很熟悉LINQ
,但我猜它的实现只是掩盖了幕后发生的迭代。
更新:
澄清一下:我并没有声称自己是这里的任何天才,我也不会怀疑任何让我的生活编程变得更好的聪明人。我只是询问是否有执行基于集合的操作的命令,就像 SQL 在 you 时所做的那样UPDATE
,而foreach(var item in obj) { ... }
不是显然迭代对象。如果 SQL 开发人员使用循环,他们每时每刻都会受到责备,但在 .NET 中,我们一直都在使用它们。作为一名在 SQL 和 .NET 中大量工作的开发人员,我想问在 .NET 中是否有任何替代方案可以完全避免循环。
database - DB存储过程操作设计——基于集合vs基于游标
有人告诉我,在设计存储过程时,基于集合的操作比基于游标的操作扩展得更好。
有人可以简要解释为什么会这样吗?
sql-server-2008 - 使用 XLS 批处理 SQL 的插入触发器增加多行 FK Id
我已经发布了与此问题相关的其他问题,但没有任何回应直接解决从 XLS 导入多行数据的问题。我一般不经常使用 SQL 或 DB,所以我的背景/经验在编写这些查询方面是有限的。如果有更简单或更直接的方法可以实现我的目标,我当然愿意接受。我不是想过度张贴或任何东西,但这个网站似乎是最有帮助的(感谢所有回复我其他帖子的人)。
从我看过的一些帖子中,我了解到我有一个基于工作集的查询/触发器(因为确实导入了多行)。最终我只需要将数据导入到父表中,子表可以填充静态值和/或父表中的值,但需要维护PK/FK关系。当从 XLS 导入超过 1 行数据时,这似乎是我遇到的最大问题。
我已经设置了一个触发器,当在父表上执行插入时,将值插入到子表中。查询正确执行,但是当插入多行数据时,我无法让 FK 与 PK 匹配。FK 始终具有插入到父表中的最后一行的 ID。我从其他论坛帖子(这里和其他网站)尝试了几种方法,但总是出错。
这是我的 updatePgVer 触发代码:
以及用于插入父表的查询:
我唯一的另一个想法是创建某种循环,该循环遍历每一行并一次导入 1,以便 @@IDENTITY 始终匹配。但是,我看过的示例似乎很难应用于我的导入。
tsql - TSQL 游标何时是最好的或唯一的选择?
我最近有关于在 TSQL 中使用游标的争论......
首先,我不是辩论中的啦啦队长。但是每次有人说cursor时,总会有一些傻瓜(或 50 个)用强制性的“光标是邪恶的”口头禅猛扑过去。我知道 SQL-Server 针对基于集合的操作进行了优化,也许游标确实是邪恶的化身,但如果我想在这背后加上一些客观的想法......
这就是我的想法:
游标和集合操作之间的唯一区别是性能之一吗?
编辑:有一个很好的案例,因为它不仅仅是性能问题——例如反复运行单个批次以获取 id 列表,或者执行存储在表字段行中的实际 SQL 文本——逐行。
追问:游标总是表现更差吗?
有没有你能想到的问题,游标比基于集合的操作更适合解决?
- 编辑:基于集合的操作实际上不能
Execute
存储过程等(请参阅上面第 1 项的编辑)。 - 编辑:在聚合大型数据集时,基于集合的操作比逐行慢得多。
- 编辑:基于集合的操作实际上不能
- 来自 MSDN 的文章解释了他们对人们使用游标解决的最常见问题的看法(以及一些基于集合的技术会更好的解释。)
- 微软在 MSDN 上的 2008 Transact SQL Reference中(含糊地)说:“......有时最好一次处理一行结果”,但没有给出任何关于他们所指案例的例子至。
大多数情况下,如果/当我对各种应用程序进行任何重大升级时,我会在我的旧代码中将游标转换为基于集合的操作,只要能从中获得一些东西。(我在很多时候倾向于对纯度的懒惰——即,如果它没有坏,就不要修复它。)
tsql - 将临时表中的数据插入多个相关表中?
我正在开发一个将数据从 Access 导入 SQL Server 2008 的应用程序。目前,我正在使用存储过程按记录单独导入数据。我不能使用批量插入或类似的东西,因为数据被插入到两个相关的表中......我有一堆字段进入 Account 表(名字、姓氏等)和三个字段每个保险表中都有一条记录,通过在存储过程中使用 SCOPE_IDENTITY 选择的自动递增 AccountID 链接回 Account 表。
由于从应用程序到数据库的往返次数,性能不是很好。出于这个和其他一些原因,我计划改用临时表并从那里导入数据。阅读我的选项来解决这个问题,对临时表中的数据执行相同的插入存储过程的游标是有意义的。然而,游标似乎是邪恶的化身,应该避免。
有没有办法在基于集合的操作中将数据插入一个表,检索自动生成的 ID,然后使用相应的 ID 将相同记录的数据插入另一个表?或者光标是我唯一的选择吗?
sql-server - 游标真的是“正确”的选择吗?
有时,在处理数据时,过程式编程是绝对无法避免的。
我目前正在优化一些遗留代码。它使用一个游标、63 对IF
/ELSE
语句和BEGIN
/END
等。我曾希望对游标进行逆向工程并使其成为一个程序过程。现在我已经完成了对算法的解码,我意识到了。. . 哎呀...它必须是程序性的,因为对记录所做的每个选择都取决于对所有先前记录的过程的结果。
所以现在我被撕裂了......还有其他选择可以将程序代码与 SQL Server 处理(CLR SP、UDF 等)混合。我非常相信使用正确的工具来完成这项工作,所以我倾向于为此制作一个 .NET CLR SP。但是稍微简化一下光标,但仍然保留光标会更快,更“容易” 。
大家怎么看?既然我们可以通过 SQL Server 访问 .NET 模块,那么使用游标是否合适(在我看来,这从一开始就是一个杂物/解决方法)。