AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[error-handling](dba)

Martin Hope
adam.g
Asked: 2022-02-11 01:16:59 +0800 CST

如何在 Sql Server 上模拟 MSG = 0 的错误?

  • 2

我需要在 Sql Server 上模拟错误:

“Msg 0, Level 20 A severe error occurred on the current command”

因为我们的开发人员必须在应用程序中处理它。

如何模拟/触发这种错误?(我也可以在我的本地主机上尝试)。

sql-server error-handling
  • 2 个回答
  • 276 Views
Martin Hope
Petter Brodin
Asked: 2019-11-14 02:19:53 +0800 CST

从查询中获取所有未声明的变量

  • 3

假设您尝试运行以下查询:

SELECT *
FROM dbo.Customers c
WHERE id = @id
    AND dateTimeCreated = @date

您将收到一条错误消息,如下所示Must declare the scalar variable "@id".

据我了解,这发生在查询的初始解析期间,在执行任何代码之前。

是否可以让 SQL Server 一次报告所有丢失的变量,或者这正是查询解析器的工作方式?

sql-server error-handling
  • 1 个回答
  • 176 Views
Martin Hope
slowjams
Asked: 2019-06-26 03:34:44 +0800 CST

为什么处理有时会终止,有时不会

  • 2
DECLARE @Error int;
INSERT INTO Person.BusinessEntityContact
 (BusinessEntityID
 ,PersonID
 ,ContactTypeID)
 VALUES
 (0,0,1);
SELECT @Error = @@ERROR;
PRINT ‘The Value of @Error is ‘ + CONVERT(varchar, @Error);

我有 :

消息 547,级别 16,状态 0,第 4 行 INSERT 语句与 FOREIGN KEY 约束“FK_BusinessEntityContact_Person_PersonID”冲突......该语句已终止。@Error 的值为 547

这意味着在抛出错误后该过程仍在继续。

但是,如果我尝试创建一个表(运行下面的脚本两次以触发错误)为:

CREATE TABLE OurIFTest(
 Col1 int PRIMARY KEY
 );
IF @@ERROR != 0
 PRINT 'Problems!';
ELSE
 PRINT 'Everything went OK!';

然后我得到了

消息 2714,级别 16,状态 6,第 2 行数据库中已经有一个名为“OurIFTest”的对象。

这意味着在抛出错误时进程终止。

那么为什么进程因“创建”而不是“插入”而终止?

sql-server error-handling
  • 1 个回答
  • 110 Views
Martin Hope
Freiheit
Asked: 2019-03-29 05:38:07 +0800 CST

“不要使用错误进行流量控制”公理是否适用于 postgres?

  • 3

在传统编程中,有一条公理表明“不要使用错误来进行流控制”。一个普遍的例子是抛出一个错误然后捕获错误,而不是使用普通的条件语句或中断语句。这是有害的,因为应用程序必须展开调用堆栈并调用一些相对昂贵的异常处理逻辑,而不是简单地处理条件语句。

我正在使用一个 postgres 系统,其中用户在 postgres 中调用一个函数,该函数在不满足条件时抛出错误而不是不返回任何行。条件大致是“这个输入值不存在,无事可做”而不是真正的例外情况。

当以类似于传统编程的方式抛出错误时,postgres 是否会产生运行时成本?换句话说,在 postgres 中使用异常作为流控制对性能有害还是马虎?

postgresql error-handling
  • 1 个回答
  • 292 Views
Martin Hope
Elaskanator
Asked: 2018-06-28 07:42:08 +0800 CST

SQL Server - 有什么方法可以验证不匹配列名的插入语句?

  • 2

我喜欢在我的编码中冗长,所以我的典型插入语句如下所示:

INSERT INTO MyTable
(
     Column1
    ,Column2
    ,Column3
    ,Column4
    ,Column5
    ,Column6
)
SELECT
     Column1 = 'some value'
    ,Column2 = 'some value'
    ,Column4 = 'some value'
    ,Column3 = 'some value'
    ,Column5 = 'some value'
    ,Column6 = 'some value'
....

如果你没有注意到这句话的问题,那么你就和我一样被愚弄了无数次。

而这类缺陷真正阴险的部分是,它可能会在导致任何问题之前工作很长时间,当它失败时,即使有错误,它也不会指示真正的错误。

例如,如果第 3 列和第 4 列分别是数字和字符串类型,那么只有某些值会导致第 4 列出现运行时错误(而第 3 列不会出现运行时错误)类型转换失败(例如,'0' 转换为数字就好了但 'asdf' 不会)。

(在我的例子中,它被隐藏在受保护代码部分之外的 Service Broker 激活过程中(这是一个日志语句),所以我什至没有看到那个错误,而是得到了伪装成禁用我的队列的毒消息的孤立事务错误。)

有什么方法可以验证这种不需要人工校对的说法吗?

PS 我知道你可以给任何你喜欢的别名,但是在一个完全可选的上下文中,比如一个语句,使用某种自动化工具(即 IntelliSense)来指出可能的意外代码INSERT将是非常有用的。

更新:我已经向微软开放了这个反馈项目,因为这个明显缺乏的功能。

sql-server error-handling
  • 4 个回答
  • 905 Views
Martin Hope
sampathsris
Asked: 2016-09-06 03:08:12 +0800 CST

在 ORA-00001 (dup_val_on_index) 上找到违反的索引

  • 1

我有一个包含多个索引的表。在我的应用程序代码中,可能会出现违反这些索引中的任何一个的情况,具体取决于用户输入。

当我的 PL/SQL 代码偶然发现一个ORA-00001.

有没有办法知道哪个索引违规导致 Oracle 引发dup_val_on_index?

oracle error-handling
  • 2 个回答
  • 963 Views
Martin Hope
krystah
Asked: 2016-06-16 03:18:36 +0800 CST

我怎样才能更好地处理不需要的、没有错误的情况?

  • 4

在编写程序时,我偶尔会遇到想要中止程序的情况,即使这种情况不一定会触发错误。

比方说,如果我不想让 John 能够运行这个过程,我会做这样的事情:

IF @UserName = 'John'
BEGIN
    RAISERROR('John, get out', 16, 1);
    RETURN 1;
END

我真的没有理由返回 1,它主要是 shell 脚本的残余,我愿意寻找更好的方法来做到这一点。

有没有更好的方法来返回错误消息并将控制权返回给调用者,以应对严格来说不是错误的意外情况?我对减少字符或代码行的数量不感兴趣。我只是有一种直觉说“这可能不是解决这个问题的最佳方法”,我很好奇是否有更聪明的方法来做到这一点。

一种替代方法是始终使用TRY/CATCH,因为RAISERROR严重性为 1-19 会将控制权交给 catch 子句。

例子:

BEGIN TRY
    PRINT 'Before RAISERROR';
    RAISERROR('Time for errors', 16, 1);
    PRINT 'After RAISERROR'
END TRY
BEGIN CATCH
    DECLARE @Msg NVARCHAR(255) = ERROR_MESSAGE()
    PRINT 'Inside CATCH'
    RAISERROR(@Msg, 16, 1)
END CATCH

输出:

Before RAISERROR
Inside CATCH
Msg 50000, Level 16, State 1, Line 13
Time for errors

缺点:需要TRY/CATCH块的存在。

sql-server error-handling
  • 1 个回答
  • 791 Views
Martin Hope
SMT
Asked: 2013-10-12 06:21:25 +0800 CST

发生代码 3/SQLSTATE=57016 时覆盖/终止

  • 2

当我的一个进程对我们用于预处理目的的临时表执行批量加载时,我遇到过几次问题。批量加载由于某种原因而失败(我们正在单独研究和解决),然后我们批量加载的表被锁定。Quiesce/Unquiesce 甚至重新启动 DB2 都不会释放该表上的锁。

这是我们每次收到的相关错误的屏幕截图:

这是有问题的错误的屏幕截图

此错误代码表示该表处于“加载挂起”状态。先前对此表的 LOAD 尝试导致失败。在重新启动或终止 LOAD 操作之前,不允许访问该表。

是否有任何命令或方法可以规避此问题或重新获得对该特定表的访问权限?当这个批量加载运行时,我们还有许多其他进程正在运行,因此重新启动 DB2 是一个非常不受欢迎的选项,并且在我们现在的情况下,它还没有释放表。

抱歉,如果这没有足够的信息可以关闭,请让我知道如果需要我还应该提供什么。

db2 error-handling
  • 2 个回答
  • 6884 Views
Martin Hope
DanBennett
Asked: 2013-08-09 06:51:27 +0800 CST

在不丢失日志记录详细信息的情况下远离作业中的 CmdExec 步骤 (SQL Server 2008)

  • 2

我的部门目前严重依赖 SQL Server 作业中的 CmdExec 步骤,称为使用 SQL Server 登录。

例如

osql /e /n /S SERVER01 /U USER /P PA$$$ /d DATABASE_01 /i "\\LOCATION\OF\SQL\SCRIPT\scriptfile.sql" /o "\\LOCATION\OF\SQL\LOG\scriptfile.log"

出于很多原因(尤其是安全性和预期此方法将过时),我希望我们放弃此模型并替换为存储过程和 SSIS 包的混合体。

我已经多次提出这个建议,我总是被告知,如果我们可以通过上述方法重新创建可能的日志记录细节,我们只能朝这个方向前进,我们的部门已经非常依赖这种方法。上面的方法在上下文中输出脚本的内容以及任何服务器消息,包括所有行数和错误消息。

诚然,这确实意味着对于 SQL Server 而言不算作错误的错误更容易被拾取 - 意外的低行数等。您可以根据需要进行尽可能多的错误处理,并且永远不会像从这个方法记录,所以我可以看到参数的这一面。

为了让我的老板远离 cmdexec 步骤,我想找到一种方法来重新创建类似于 cmdexec 当前提供给我们的日志记录输出的方法 - 也许是 SQL 表而不是文件(尽管两者都可以) - 在SSIS 包和存储过程。

我熟悉使用 raiserror 进行错误处理——我在存储过程中广泛使用它——但这里的任务不仅仅是捕获 SQL 错误,而是捕获所有 cmdexec 日志记录捕获,最好是在正在执行的脚本的上下文中。 . 除了编写存储过程并在每个脚本的每个步骤之后执行它之外,我看不到这样做的方法。

此外,我很想听听有关为不使用 cmdexec 步骤的人进行日志记录的最佳实践方法。我在这个部门学习过 SQL,这是我所知道的唯一做事方式。

为了我自己的开发,我越来越多地尝试编写带有错误处理的存储过程。如果我遇到不会引发错误的问题,我会通过在开发服务器上以交互方式重新运行代码来进行故障排除,这样我就可以监控分步信息。这不如我们从 cmdexec 获得的完整日志记录方便,但更安全。

其他人做的比这更多吗?有没有更好的办法?

sql-server-2008-r2 error-handling
  • 1 个回答
  • 815 Views
Martin Hope
Scott Chamberlain
Asked: 2013-04-02 10:12:44 +0800 CST

如何抑制信息性 raiserror 消息

  • 1

我有一个设置脚本调用sp_configure几次来设置一些系统变量,它工作正常但我有以下几个语句

配置选项 '%ls' 从 %ld 更改为 %ld。运行 RECONFIGURE 语句进行安装。

相应地填充变量。在内部我可以看到 sp_configure 正在调用

raiserror(15457,-1,-1, @configname, @prevvalue, @configvalue) with log

当用户运行脚本时,我能做些什么来防止这些信息性消息(对脚本无用,我RECONFIGURE从脚本内部调用)显示在 MSSMS 的消息窗口中?

sql-server error-handling
  • 1 个回答
  • 1297 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve