问题标签 [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 投票
4 回答
3653 浏览

sql - 关系数据库设计的好资源

我正在寻找一本关于关系数据库设计、性能调整等最佳实践的书/网站/教程。事实证明,这种资源有点难找;有很多“这里是规范化,这里是 ER 图,有它”,但在实际示例中并不多。有人有想法么?

0 投票
16 回答
6706 浏览

sql - 有没有人在单元测试 SQL 存储过程方面取得任何成功?

我们发现我们为 C#/C++ 代码编写的单元测试确实得到了回报。但是我们在存储过程中仍然有数千行业务逻辑,只有在我们的产品向大量用户推出时才会真正得到愤怒的测试。

更糟糕的是,其中一些存储过程最终会变得很长,因为在 SP 之间传递临时表时会降低性能。这阻止了我们进行重构以使代码更简单。

我们已经多次尝试围绕我们的一些关键存储过程构建单元测试(主要是测试性能),但发现为这些测试设置测试数据真的很困难。例如,我们最终会复制测试数据库。除此之外,测试最终对更改非常敏感,甚至对存储过程的最小更改也是如此。or table 需要对测试进行大量更改。因此,在由于这些数据库测试间歇性失败而导致许多构建中断之后,我们不得不将它们从构建过程中拉出来。

所以,我的主要问题是:有没有人成功地为他们的存储过程编写过单元测试?

我的问题的第二部分是使用 linq 进行单元测试是否会/更容易?

我在想,不必设置测试数据表,您可以简单地创建一个测试对象集合,并在“linq to objects”的情况下测试您的 linq 代码?(我对 linq 完全陌生,所以不知道这是否可行)

0 投票
3 回答
3707 浏览

sql - 在 Emacs sql-mysql 中指定端口号

我一直在使用 Emacs 的 sql 交互模式与 MySQL db 服务器对话并开始享受它。开发人员在新的非默认端口号上设置了另一个数据库,但我不知道如何使用 sql-mysql 访问它。

尝试连接数据库时如何指定端口号?

如果 Emacs 可以提示我输入端口号,如果我不指定就使用默认值,那就更好了。有这样的机会吗?

0 投票
11 回答
4346 浏览

sql - 建立审计制度;SQL Server 后端上的 MS Access 前端

所以基本上我正在为我的公司构建一个应用程序,它需要使用 MS Access 构建,它需要在 SQL Server 上构建。

我已经制定了大部分计划,但很难找到处理审计系统的方法。

由于它仅在内部使用,您甚至无法从建筑物外部触摸数据库,我们没有使用登录系统,因为该程序只有在用户已经通过 Active 登录到我们的内部网络后才会使用目录。知道了这一点,我们正在使用一个系统来自动检测 Active Directory 用户的名称以及他们在其中一个数据库表中的权限,从而决定他们可以做什么或不可以做什么。

所以实际的审计表将有 3 列(这个设计可能会改变,但对于这个问题没关系);谁(Active Directory 用户)、何时(添加/删除/编辑时间)、什么(更改了什么)

我的问题是我应该如何处理这个问题。理想情况下,我知道我应该使用触发器,以便在没有记录审计的情况下更新数据库,但是我不知道如何以这种方式获取 Active Directory 用户。另一种方法是将其直接编码到 Access 源中,以便每当发生变化时,我都会运行 INSERT 语句。显然这是有缺陷的,因为如果 Access 发生某些事情或数据库被其他东西触及,那么它将不会记录审计。

任何可能对我有帮助的建议、示例或文章将不胜感激!

0 投票
6 回答
10155 浏览

sql - 数据库不区分大小写索引?

我有一个查询,我正在搜索一个字符串:

现在,这工作正常,但它不能很好地扩展,我需要优化它。我找到了一个类似于创建生成视图的选项,或者类似的东西,但我希望使用索引有一个更简单的解决方案。

我们正在使用 DB2,我真的想在 index 中使用表达式,但是这个选项似乎只在 z/OS 上可用,但是我们正在运行 Linux。我还是尝试了表达式索引:

但当然,它会在 UPPER(name) 上窒息。

有没有另一种方法可以以这种方式创建索引或类似的东西,这样我就不必重组现有查询以使用新生成的视图,或更改现有列或任何其他此类侵入性更改?

编辑:我愿意听取其他数据库的解决方案......它可能会延续到 DB2......

0 投票
9 回答
52700 浏览

sql - 在 SQL Server 上插入更新存储过程

我编写了一个存储过程,如果记录存在,它将进行更新,否则它将进行插入。它看起来像这样:

我以这种方式编写它的逻辑是,更新将使用 where 子句执行隐式选择,如果返回 0,则插入将发生。

这样做的替代方法是进行选择,然后根据返回的行数进行更新或插入。我认为这是低效的,因为如果您要进行更新,它将导致 2 次选择(第一次显式选择调用和第二次隐式在更新的位置)。如果proc要进行插入,那么效率就没有区别。

我的逻辑在这里合理吗?这是您将插入和更新组合到存储过程中的方式吗?

0 投票
7 回答
537 浏览

sql - 通过 MSFT 的数据库发布向导发布后的 DB 问题

我在相当多的 DotNetNuke 站点上工作,偶尔(我还没有弄清楚共同因素),当我使用 Microsoft 的数据库发布向导为我在开发服务器上创建的站点创建脚本后,运行主机上的脚本(通常是 GoDaddy.com),并上传站点文件,我收到一个错误...我 99.9% 确定它与文件无关,所以不确定从数据库的哪里开始。不幸的是,使用 DotNetNuke 你没有得到 YSOD,而是一个通用错误,没有真正的方法来找到发生的实际异常。

我只是好奇是否有人在使用数据库发布向导时遇到过类似的部署问题,如果是这样,他们是如何克服这些问题的?我拥有 RedGate 工具集,但像 GoDaddy 这样的一些主机不允许您直接连接到他们的服务器......

0 投票
3 回答
3096 浏览

c# - 参数绑定:幕后发生了什么?

.NET、Java 和其他各种语言的高级数据库 API 通常提供称为准备语句和参数绑定的技术,而不是向数据库服务器发送纯文本命令。我想知道的是当你执行这样的语句时会发生什么:

我知道这是一个最佳实践。SQL 注入攻击以这种方式被最小化。但是,当您执行这些语句时,幕后究竟发生了什么?最终结果仍然是 SQL 安全字符串吗?如果不是,最终结果是什么?这足以防止 SQL 注入攻击吗?

0 投票
47 回答
76263 浏览

c# - 将 SQL 保存在存储过程与代码中的优缺点是什么

在 C# 源代码或存储过程中保留 SQL 的优点/缺点是什么?我一直在与朋友讨论我们正在开发的一个开源项目(C# ASP.NET 论坛)。目前,大部分数据库访问是通过在 C# 中构建 SQL 内联并调用 SQL Server DB 来完成的。因此,我正在尝试确定对于这个特定项目,哪个是最好的。

到目前为止,我有:

代码中的优点:

  • 更易于维护 - 不需要运行 SQL 脚本来更新查询
  • 更容易移植到另一个数据库 - 无需移植

存储过程的优点:

  • 表现
  • 安全
0 投票
7 回答
332 浏览

sql - 带有安全网的 SQL

我的公司有一群才华横溢、聪明的运营人员,他们工作非常努力。我想给他们一个 SQL 执行工具,帮助他们避免常见的、容易检测到的 SQL 错误,这些错误在他们赶时间时很容易犯。任何人都可以建议这样的工具吗?详情如下。

运营团队的一部分职责是编写非常复杂的即席 SQL 查询。毫不奇怪,操作员有时会因为太忙而在编写查询时出错。

幸运的是,他们的查询都是 SELECT 而不是更改数据的 SQL,而且它们无论如何都在数据库的副本上运行。尽管如此,我们还是希望防止它们运行的​​ SQL 出现错误。例如,有时错误会导致长时间运行的查询减慢他们正在使用的重复系统并给其他人带来不便,直到我们找到罪魁祸首并杀死它。更糟糕的是,有时这些错误会导致我们直到很久以后才发现明显正确的答案,从而导致尴尬。

我们的开发人员在他们编写的复杂代码中也会犯错误,但他们有 Eclipse 和各种插件(例如FindBugs)可以在输入时捕获错误。我想给运营商类似的东西 - 理想情况下它会看到

在你执行之前,它会说“嘿,你意识到这是一个笛卡尔积吗?你确定要这样做吗?” 它不必非常聪明——发现明显缺少连接条件和类似的明显错误就可以了。

看起来TOAD应该这样做,但我似乎无法找到有关此类功能的任何信息。有没有像 TOAD 这样的其他工具可以提供这种半智能纠错?

更新:我忘了提到我们正在使用 MySQL。