1

在 SQL SERVER 2008 中,我如何将错误消息作为选择语句返回

SELECT ** FROM emp 

将返回以下错误

    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near '*'.

我只需要将第二行作为SELECT语句返回

我试过@@ERROR,但看起来它只返回错误代码

我正在做的是从客户端验证 sql 语句,所以如果有一种方法可以在不访问服务器的情况下做到这一点,这也很好,我正在使用 VB

谢谢

4

2 回答 2

6

你确实看到了Incorrect syntax near '*'.,不是吗?这意味着它被退回了

您可能想知道如何检索错误消息文本,答案是您只能捕获执行期间发生的错误(语法错误是编译,不能在同一批次中捕获)并且您必须使用 BEGIN ... TRY/ BEGIN ... CATCH 块。在 catch 块内,该ERROR_MESSAGE()函数将返回捕获的异常的文本。

因此,为了给您的案例提供一个示例,请将代码包装在 BEGIN TRY/BEGIN CATCH 中,并在不同的批次中使用不正确的语法:

begin try
    exec sp_executesql N'SELECT ** FROM emp';
    SELECT NULL;
end try
begin catch
    select ERROR_MESSAGE();
end catch
于 2012-11-01T14:11:44.280 回答
3

您可以使用error_message()

但你的错误看起来像编译错误,所以它不会帮助你。只有使用动态 SQL 才能捕获它 :) 只是为了测试它

begin try
    exec sp_executesql
        @stmt = N'SELECT ** FROM emp'
end try
begin catch
    select error_message()
end catch

你也可以看看error_procedure(), error_line(),error_state()等等

更新如果您尝试在客户端处理服务器错误,我建议您阅读有关 VB 异常的更多信息。试试这个链接http://msdn.microsoft.com/en-us/library/aa289505(v=vs.71).aspx

于 2012-11-01T14:09:47.207 回答