问题标签 [raiserror]
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.
tsql - 重新编译时的存储过程语法错误被 Catch 捕获并返回空结果集
我正在尝试隔离一个问题(类似于 stackoverflow.com/q/483787/537284 中的主题)。该问题涉及存储过程,并且每周“随机”发生一次。为了尝试重现该问题,我创建了不同的程序版本来模拟好的和坏的可能结果:
- 良好的多行单结果集。
- 带有信息性消息的良好多行单结果集。
- 具有 Raiserror 的良好多行单结果集(低于 11 级)。
- 良好的多行单结果集与打印。
- 良好的空单结果集。
- 语法错误。
- try/catch 语法错误。
- Raiserror 错误(级别 11)。
- Raiserror(级别 11)和 try/catch 出现错误。
在这些测试之间,try/catch 版本的语法错误与我预期的不同。两个结果集(一个为空,另一个来自 catch 指令)返回。
语法错误是否被部分执行?我期待的是 catch 块的结果,而不是 try 的结果。我将此与Raiserror进行了比较,并使用严重性 11,它触发了仅返回一个结果集的 catch 块。语法错误和Raiserror 有什么区别?
这是我的测试程序:
这是我的测试表(从其他人那里撕下来的):
sql - 如果包含转换为字符的日期时间,T-SQL Raiserror 丢失消息 (10)
好的,所以我试图在 T-SQL (SQL-2000) 中引发错误。基本 Sql 代码如下所示。. .
我在 VS2008 中用于捕获 raiserror 的托管 C++ 代码如下所示。. .
现在,我在“C++”代码中设置了一个断点。如果 raiserror 消息包含作为 CHAR 的日期时间,则 excp->Message 为空。如果我将日期时间作为 CHAR 删除并仅发送硬编码的 raiserror 消息,例如“此处发生错误”,则 excp->Message 已完成并用 raiserror 消息填充。
有没有其他人见过这种类型的活动?我可以在这个电话的任何一方做些什么。. . 即,在 SQL 端或 C++ 端获取此日期时间字符串包含在 raiserror 消息中????
请帮忙。我被困住了!
谢谢你 !
tsql - SQL Server 查询处理时间过长?
我在存储过程中有一个复杂的查询。在 proc 本身中,我想判断事情需要多长时间,如果我认为已经超过 30 秒的阈值(这将迫使人们进行一些优化),则执行 RAISERROR。
任何人都可以在 TSQL 代码中说出一种体面的方式来实现这一点吗?
谢谢。
sql-server - 没有在 Sqlserver 上使用 Perl DBI (DBD::ODBC) 获取错误代码、类型和状态
我有一个 perl 脚本,它执行以下操作以运行插入 stmnt 并执行故意的 RAISERROR。现在我可以看到错误已生成但错误代码错误 - SQL-42000 ,但错误诊断方法不返回任何内容。使用 $DBI::err,$DBI::errstr,$DBI::state 也不会打印正确的内容。只有 $DBI::errstr 正确出现。
输出:
.net - SQL Server 查询通知是否有可扩展的替代方法,用于从 SQL Server 引发应用程序中的事件?
SQL Server Query Notifications 是一个很棒的工具,但它似乎并不能很好地扩展。每个想要/需要通知的应用程序都必须在它想要通知的持续时间内(通常是应用程序运行的整个时间)保持与数据库的开放连接。
我对创造性的解决方案持开放态度。我突然想到在服务器上放置一个服务,该服务将订阅 SQL Server 查询通知,然后可以通知客户端应用程序。在这种情况下,您只打开了 1 个数据库连接(为什么不一直保持打开状态),然后您的客户端应用程序可以订阅服务以获取通知。
想法??
sql - 如何在 RAISERROR 方法中打印 DateTime 变量?
我的存储过程接受两个参数 @EffectiveStartDate DATETIME
@EffectiveEndDate DATETIME
我这样编写验证代码:
我可以知道我在这里做错了什么。
在编译我的 SProc 时,它引发了消息“CAST() 附近的语法不正确”
c# - RAISERROR―如何与SqlException区别?
我有一些 3-4 个存储过程——如果需要,我可以修改它们——用于RAISERROR
通知我的应用程序数据库端的一些致命错误。其中一些存储过程是从 C# 端使用ExecuteNonQuery
执行的,而其他存储过程是使用ExecuteReader
. 目前,我将这些命令包装在一个try { ... } catch (SqlException ThisSqlException) { ... }
块中,但问题是在我必须分别处理的至少两种情况下会抛出此异常:
1) 连接本身错误,或者参数错误或类型不匹配;和
RAISERROR
2)每当我明确使用时发生的错误。
由于这是一个 WCF 应用程序,我必须根据异常的性质(无论是否由于RAISERROR
命令)向客户端应用程序返回不同的反馈。那么,我该如何区分这两种情况呢?
sql-server-2005 - 存储过程中的 IF、RAISERROR 和 RETURN
我有一个存储过程PROC
,它接收一些参数。如果其中一个 ,@ID
不为空,则PROC_A
必须执行给定的存储过程 , 。否则,PROC_B
必须执行。问题是它们都可能发出一个RAISERROR
,我想通过调用堆栈传播它以显示在客户端应用程序上。但是,这RAISERROR
不会PROC
像它应该那样停止其余的存储过程,而且,因为我使用的是IF
子句,所以检查IF ( @@ERROR <> 0 ) RETURN
也不是一个选项。我唯一的选择似乎是使用一个TRY...CATCH
块来包装IF
子句并在块RAISERROR
内重新抛出 from ,这很尴尬, CATCH
因为那时我将不得不缓存ERROR_MESSAGE()
和使用ERROR_SEVERITY()
ERROR_STATE()
RAISERROR
再来一次。
真的没有更优雅的方式吗?
sql - 你能检测到 INSERT-EXEC 场景吗?
是否可以检测当前存储过程是否被INSERT-EXEC
语句调用?
是的,我知道我们可能不想再使用INSERT-EXEC
语句……这不是我要问的问题。
我使用的原因INSERT-EXEC
是因为我希望促进存储过程的重用,而不是一直重写相同的 SQL。
这就是我关心的原因:
在这种情况下,一旦请求INSERT-EXEC
a ,原始错误消息就会丢失。ROLLBACK
因此,创建的任何记录现在都将是孤立的。
例子:
c# - SQL Server 和如何处理错误类型不冲突
我使用 SQL Server 2008 和 ASP.NET C#,并且我有一个返回一些计算行的存储过程。
我想在执行该过程之前检查参数值,如果参数值错误,我想返回自定义错误消息。
在 UI 端,我必须根据错误类型返回不同的文本并使用不同的窗口。例子:
- 参数值错误时出错。
- 未处理的错误。
我目前在数据库中使用这种SP,但我尝试使用状态参数甚至严重性参数来识别错误类型。但是我与返回与我的参数错误相同的状态编号的未处理错误存在一些冲突,因此出现了错误的窗口。如果我使用严重性级别,我猜 SP 在某些情况下也可能返回具有相同严重性编号的错误。
我给你一个简单的例子,以便更好地了解:
来自 C#:
在上面的代码中,日期是正确的,但程序没有返回消息“内部错误:……”,尽管 SP 有错误。
我有一些想法,但我只想知道你的观点和最好的方法。
谢谢。