你把 SQL RAISERROR 代码放在哪里?
Posted
技术标签:
【中文标题】你把 SQL RAISERROR 代码放在哪里?【英文标题】:Where do you put SQL RAISERROR code? 【发布时间】:2016-09-12 17:20:19 【问题描述】:我正在尝试设置自定义错误消息,以便在用户输入重复键(而不是系统消息 2627)时传递给 MS Access(从 SQL Server)。我已经阅读了 sp_addmessage 和 RAISERROR 和 TRY/CATCH 块,它们都非常有意义。但是我没有看到它似乎说你把 RAISERROR 代码(和 TRY/CATCH 块)放在哪里,所以它实际上会传回应用程序。那么,代码去哪了呢?
【问题讨论】:
RAISEERROR() 是一个 sql 函数。当您想要返回错误时调用它。您不必将其封装在存储过程中。它已经可以在您想使用的任何地方使用。 @StevenMays 好的,我明白了。不过,我仍然不知道将使用 RAISERROR 的代码放在哪里。 你真的不需要 RAISERROR。在 VBA 中使用错误处理程序来显示有意义的消息。这是一个例子:social.msdn.microsoft.com/Forums/office/en-US/… 【参考方案1】:不要考虑用户输入重复键的问题。相反,考虑用户只是输入键,当您尝试插入它们时,其中一些键被证明是重复的。这是一个细微的差别,但它在这里对您有所帮助,因为这意味着您可以考虑让您的代码可用于所有新的表格插入,而不仅仅是特定类型的插入。
当用户输入密钥时,INSERT sql 语句将运行。如果键是重复的,并且您在表上定义了约束以防止出现这种情况,则 INSERT 语句将失败。如果您的 Access 应用程序让您编写自定义 SQL,您可以将其包装在 TRY/CATCH 中,并将 RAISERROR 放在 CATCH 块中。如果您的 Access 应用程序永远看不到任何 SQL,那么您可能会被卡住,并且不得不忍受内置的行为。
【讨论】:
我正在自己开发的 SQL Server 后端上运行应用程序,所以是的,我正在编写 SQL。如果我正确阅读了您的答案,我会将 TRY/CATCH 放在表代码中的约束中吗? IE。在 CREATE TABLE 语句中? 否定的@Rominus,你会把它放在 INSERT 语句中。以上是关于你把 SQL RAISERROR 代码放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server ->> THROW字句对比RAISERROR字句
过程中的 Raiserror (SQL Server 2014) 无法捕获客户端 (c#)