问题标签 [sql]

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 投票
6 回答
6218 浏览

sql - 将复杂的 Oracle PL/SQL 游标逻辑封装为视图的最佳方法?

我编写了 PL/SQL 代码来将表非规范化为更易于查询的形式。该代码使用一个临时表来完成它的一些工作,将原始表中的一些行合并在一起。

该逻辑按照链接文章中的模式编写为流水线表函数。table 函数使用PRAGMA AUTONOMOUS_TRANSACTION声明来允许临时表操作,并且还接受游标输入参数以将非规范化限制为某些 ID 值。

然后我创建了一个视图来查询表函数,将所有可能的 ID 值作为游标传递(该函数的其他用途将更具限制性)。

我的问题:这一切真的有必要吗?我是否完全错过了完成同一件事的更简单的方法?

每次我接触 PL/SQL 时,我都会觉得我打字太多了。

更新:我将添加我正在处理的表格的草图,让每个人都了解我正在谈论的非规范化。该表存储员工工作的历史记录,每个工作都有一个激活行和(可能)一个终止行。员工可能同时拥有多个工作,以及在不连续的日期范围内一遍又一遍地从事相同的工作。例如:

查询它以找出谁在做什么工作是不平凡的。EMP_ID因此,对于通过游标传入的任何 s,我的非规范化函数仅使用每个作业的日期范围填充临时表。传入EMP_IDs 1 和 2 将产生以下结果:

END_DATE允许NULLs 用于没有预定终止日期的工作。)

可以想象,这种非规范化的形式查询起来要容易得多,但是创建它——据我所知——需要一个临时表来存储中间结果(例如,激活行已被激活的作业记录)找到了,但没有终止……还没有)。使用流水线表函数填充临时表,然后返回其行是我想出的唯一方法。

0 投票
7 回答
81739 浏览

sql - SQL Server 2005 - 以编程方式导出表(运行 .sql 文件来重建它)

我有一个带有表客户的数据库,其中包含一些数据

我在办公室有另一个数据库,一切都相同,但我的客户表是空

的 如何在 SQL Server 2005 (T-SQL) 中创建一个包含所有数据的 sql 文件在第一个数据库的客户表上,创建一个,比如说,buildcustomers.sql,我压缩该文件,通过网络复制它,在我的 SQL Server 中执行它,瞧!我的表客户已满

我怎样才能对整个数据库做同样的事情?

0 投票
4 回答
5982 浏览

sql - 删除sql统计信息可以吗?

我们一直在尝试将许多列从可空更改为不可空,这涉及删除所有关联对象、进行更改并重新创建关联对象。

我们一直在使用 SQL 比较来生成脚本,但我注意到 SQL 比较不会编写统计对象的脚本。这是否意味着可以删除它们并且数据库将像没有它们之前一样工作,或者 Red Gate 错过了一个技巧?

0 投票
6 回答
2441 浏览

c# - 在 PHP 文件中解析 SQL 的最佳方法?

在我的毕业论文中,我开发了一个程序,该程序可以使用准备好的语句自动检测并建议修复 SQL 注入漏洞。特别是 PHP 的 mysqli 扩展。我对 SO 社区的问题是:您首选的方法是检测 PHP 源代码中的 SQL?

我使用了一个包含SQL keywords (SELECT, INSERT, ...)并基本上解析每一行的枚举,遍历枚举以确定是否存在任何 SQL。此外,我必须确保解析器没有错误地检测到 html(例如 <\select>)。

对我来说,这个解决方案运行良好,但现在我手头有更多时间,并考虑重构代码以使用更优雅(和高效)的解决方案。请将您的解决方案限制为使用C#,因为这是我编写程序时使用的。

0 投票
10 回答
92644 浏览

sql - 在 INNER JOIN 的一部分中使用 LIKE 子句

在构建存储过程/查询时,我可以/应该使用 LIKE 标准作为 INNER JOIN 的一部分吗?我不确定我问的是否正确,所以让我解释一下。

我正在创建一个过程,该过程将获取要在包含文本的列中搜索的关键字列表。如果我坐在控制台前,我会这样执行它:

但是我在存储过程中进行“强类型”列表解析时学到的一个技巧是将列表解析为表变量/临时表,将其转换为正确的类型,然后对该表执行 INNER JOIN在我的最终结果集中。这在向过程发送整数 ID 列表时非常有用。我最终得到一个如下所示的最终查询:

我想将此技巧与字符串列表一起使用。但由于我正在寻找一个特定的关键字,我将使用 LIKE 子句。所以理想情况下,我想我的最终查询应该是这样的:

这可能/推荐吗?

有没有更好的方法来做这样的事情?


我将通配符放在子句两端的原因是因为卡片文本中使用了“archfiend”、“beast-warrior”、“direct-damage”和“battle-damage”术语。

我的印象是,根据性能,我可以使用我指定的查询还是使用全文关键字搜索来完成相同的任务?

除了让服务器对我想要进行文本搜索的字段进行文本索引之外,我还需要做些什么吗?

0 投票
4 回答
33584 浏览

sql - SQL Server - 脏读的优点和缺点

为什么我应该或不应该使用脏读:

在 SQL Server 中?

0 投票
6 回答
115894 浏览

sql - 推荐的用于标记或标记的 SQL 数据库设计

我听说过几种实现标记的方法;使用 TagID 和 ItemID 之间的映射表(对我来说很有意义,但它可以扩展吗?),向 ItemID 添加固定数量的可能 TagID 列(似乎是个坏主意),将标签保留在逗号分隔的文本列中(听起来疯狂但可以工作)。我什至听说有人推荐一个稀疏矩阵,但是标签名称如何优雅地增长?

我错过了标签的最佳实践吗?

0 投票
3 回答
10345 浏览

sql - 在 MS Reporting Services 中执行动态子查询的最佳方式?

我是 SQL Server Reporting Services 的新手,想知道执行以下操作的最佳方法:

  • 查询获取热门ID列表
  • 每个项目的子查询以从另一个表中获取属性

理想情况下,最终报告列应如下所示:

可能有一些方法可以构建一个巨大的 SQL 查询来一次性完成所有这些,但我更喜欢将它划分。是否推荐编写一个 VB 函数来为每一行执行子查询?谢谢你的帮助。

0 投票
6 回答
1808 浏览

c# - 我错过了一些关于 LINQ 的东西吗?

我似乎遗漏了一些关于 LINQ 的东西。对我来说,它看起来像是将一些我最不喜欢的 SQL 元素转移到 C# 语言中,并将它们用于其他事情。

我的意思是,我可以看到在数据库以外的事物上使用类似 SQL 的语句的好处。但是,如果我想编写 SQL,那么为什么不直接编写 SQL 并将其排除在 C# 之外呢?我在这里想念什么?

0 投票
11 回答
5086 浏览

sql - 表示关系数据库中的排序

我在数据库中有一组对象。照片库中的图像、目录中的产品、书中的章节等。每个对象都表示为一行。我希望能够任意排序这些图像,将该排序存储在数据库中,这样当我显示对象时,它们就会以正确的顺序排列。

例如,假设我正在写一本书,每一章都是一个对象。我写我的书,并按以下顺序排列章节:

简介、可访问性、形式与功能、错误、一致性、结论、索引

它转到编辑器,并返回以下建议的顺序:

介绍、形式、功能、可访问性、一致性、错误、结论、索引

如何以稳健、有效的方式将此排序存储在数据库中?

我有以下想法,但我对其中任何一个都不感到兴奋:

  1. 大批。每行都有一个排序 ID,当更改顺序时(通过删除后插入),订单 ID 会更新。这使得检索变得容易,因为它只是ORDER BY,但似乎很容易破解。

    // REMOVAL
    UPDATE ... SET orderingID=NULL WHERE orderingID=removedID
    UPDATE ... SET orderingID=orderingID-1 WHERE orderingID > removedID
    // INSERTION
    UPDATE ... SET orderingID=orderingID+1 WHERE orderingID > insertionID
    UPDATE ... SET orderID=insertionID WHERE ID=addedID

  2. 链表。每行都有一列用于排序中下一行的 id。遍历在这里似乎很昂贵,尽管可能通过某种方式使用ORDER BY我没有想到的。

  3. 间隔数组。将 orderingID(如 #1 中使用的)设置为大,所以第一个对象是 100,第二个是 200,依此类推。然后当插入发生时,您只需将其放在(objectBefore + objectAfter)/2. 当然,这需要偶尔重新平衡,所以你不会让事物靠得太近(即使使用浮点数,你最终也会遇到舍入错误)。

这些对我来说都不是特别优雅。有没有人有更好的方法来做到这一点?