标签: raiserror

RAISERROR严重程度不同意味着什么?

我最好的谷歌结果是这样的:

  • 低于11是警告,而不是错误
  • 11-16可供使用
  • 16以上是系统错误
  • 11-16之间没有行为差异

但是,从BOL,"任何用户都可以指定从0到18的严重级别".

在我的特定存储过程中,我希望将错误返回到.Net客户端应用程序,因此看起来11-18之间的任何严重性级别都可以解决问题.有没有人有关于每个级别的含义以及如何使用它们的任何权威信息?

sql-server raiserror

70
推荐指数
2
解决办法
5万
查看次数

如何在RAISERROR方法中打印DateTime变量?

我的存储过程接受两个参数@EffectiveStartDate DATETIME
@EffectiveEndDate DATETIME

我写了验证代码:

IF(@EffectiveStartDate > @EffectiveEndDate)
        BEGIN
            RAISERROR ('SPName: InsertUpdateLiquidityDateRule:  Start Date: %s cannot  be greater than End Date %s',11,1,CAST(@EffectiveStartDate AS varchar(30)),CAST(@EffectiveEndDate AS varchar(30)));
            RETURN -1
        END 
Run Code Online (Sandbox Code Playgroud)

我可以在这里知道我做错了什么.

在编译我的SProc时,它引发了消息"CAST()附近的语法不正确"

sql sql-server stored-procedures sql-server-2005 raiserror

27
推荐指数
1
解决办法
2万
查看次数

如何在单个进程中模拟SQL Server中的死锁?

我们的客户端代码检测到死锁,等待一段时间,然后重试请求最多5次.重试逻辑基于错误号1205检测死锁.

我的目标是在各种存储过程中测试死锁重试逻辑和死锁处理.我可以使用两个不同的连接创建死锁.但是,我想在单个存储过程本身内部模拟死锁.

死锁引发以下错误消息:

消息1205,第13级,状态51,第1行
事务(进程ID 66)在锁资源上与另一个进程发生死锁,并被选为死锁受害者.重新运行该交易.

我看到此错误消息在sys.messages:

select * from sys.messages where message_id = 1205 and language_id = 1033

message_id language_id severity  is_event_logged   text
1205       1033        13        0                 Transaction (Process ID %d) was deadlocked on %.*ls resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
Run Code Online (Sandbox Code Playgroud)

我不能使用RAISERROR以下方法引发此错误:

raiserror(1205, 13, 51)
Run Code Online (Sandbox Code Playgroud)

消息2732,级别16,状态1,行1
错误号1205无效.号码必须是13000到2147483647,不能是50000.

我们的死锁重试逻辑检查错误号是否为1205.死锁需要具有与正常死锁相同的消息ID,级别和状态.

有没有办法模拟死锁(使用RAISERROR或任何其他方法)并只用一个进程获取相同的消息号?

我们的数据库使用SQL 2005兼容性,但我们的服务器在2005年到2008年之间有所不同.

sql sql-server unit-testing deadlock raiserror

27
推荐指数
3
解决办法
2万
查看次数

在C#中捕获SQL引发错误

我在SQL过程中生成raise错误:

RAISERROR('Already exist',-10,-10)

但我无法在C#中使用以下代码捕获它

catch (SqlException ex)
{
    bResult = false;                   
    if (ex.Errors[0].Number == -10)
    {
        CommonTools.vAddToLog("bInsertNewUser", "ManageUsers", ex.Message);
        if ((savePoint != null))
            savePoint.Rollback();
    }
} 
Run Code Online (Sandbox Code Playgroud)

如何捕获C#中引发的错误?

c# sql-server raiserror

23
推荐指数
2
解决办法
3万
查看次数

T-SQL中的TRY和RAISERROR

有一个小问题,并想知道我是否正确使用这些.

在我的SQL脚本中有

BEGIN TRY
    // check some information and if there are certains errors
    RAISERROR ('Errors found, please fix these errors and retry', 1, 2) WITH SETERROR

    // Complete normal process if no errors encountered above
    PRINT 'IMPORT SUCCEEDED'
END TRY
BEGIN CATCH
    PRINT 'IMPORT ABORTED. ERRORS ENCOUNTERED'
END CATCH
Run Code Online (Sandbox Code Playgroud)

但是,这会遇到错误,然后继续执行脚本的其余部分.我错过了什么?谢谢!

t-sql error-handling raiserror

20
推荐指数
3
解决办法
3万
查看次数

SQL Server中的RaiseError

在以前的版本中,我们在t-sql中引发了错误:

RAISERROR 50000 'My Error Message'
Run Code Online (Sandbox Code Playgroud)

在最新的SQL Server中,此语法已停止使用,并替换为RaiseError()语法.

我想有一个提出错误的通用方法,到目前为止我能得到的最好的方法是:

sp_addmessage @msgnum = 50001,
              @severity = 10,
              @msgtext = N'My Error Message', @replace = 'REPLACE';
RAISERROR (50001, 10, 1, 'This error message is not displayed')
Run Code Online (Sandbox Code Playgroud)

但我不能为每条消息创建一个带有sp_addmessage的错误消息,因为有1000个消息.

使用自定义消息引发消息的更好方法是什么?

t-sql sql-server raiserror

13
推荐指数
2
解决办法
3万
查看次数

根据MSDN的指导,TSQL RaiseError语法不正确

MSDN声明以下语法:

RAISERROR ( { msg_id | msg_str | @local_variable }  
{ ,severity ,state }  
[ ,argument [ ,...n ] ] )  
[ WITH option [ ,...n ] ] 
Run Code Online (Sandbox Code Playgroud)

msg_str预计一个字符串,最多2047个字符,但截断长字符串.它还可以替换参数,这会截断消息,而不是值提供的字符数:

错误消息最多可包含2,047个字符.如果消息包含2,048个或更多字符,则仅显示前2,044个字符,并添加省略号以指示消息已被截断.请注意,由于内部存储行为,替换参数消耗的字符数多于输出显示的字符数.例如,%d的替换参数(指定值为2)实际上会在消息字符串中生成一个字符,但内部还会占用另外三个存储字符.此存储要求会减少消息输出的可用字符数.指定msg_str时,RAISERROR会引发错误消息,错误编号为50000.

severity预计25 0之间的数字,但更正其他号码:

任何用户都可以指定从0到18的严重级别.从19到25的严重级别只能由sysadmin固定服务器角色的成员或具有ALTER TRACE权限的用户指定.对于从19到25的严重性级别,需要WITH LOG选项.严重级别小于0将被解释为0.严重级别大于25将被解释为25.

state预计值0到255,但校正零度以下的值:

[state]是0到255之间的整数.负值默认为1.不应使用大于255的值.


问题

运行这些查询时出现以下错误:

RAISEERROR('Test', 20, 1);
Run Code Online (Sandbox Code Playgroud)

Msg 102,Level 15,State 1,Line 1

'Test'附近的语法不正确.


DECLARE @err_message nvarchar(255);
SET @err_message = 'Test';
RAISEERROR(@err_message, 20, 1);
Run Code Online (Sandbox Code Playgroud)

Msg 102,Level 15,State 1,Line 3

'RAISEERROR'附近的语法不正确.


我可以很好地执行各种其他查询.例如:

THROW 50001, 'Test', 1;
Run Code Online (Sandbox Code Playgroud)

Msg 50001,Level 16,State 1,Line …

sql t-sql sql-server raiserror sql-server-2016

10
推荐指数
1
解决办法
4180
查看次数

RAISERROR-如何区分SqlException?

我有3-4个存储过程 - 如果需要我可以修改 - RAISERROR用于通知我的应用程序在数据库端的一些致命错误.其中一些存储过程是从C#端ExecuteNonQuery执行的,而其他存储过程是用ExecuteReader.目前,我将这些命令包装在一个try { ... } catch (SqlException ThisSqlException) { ... }块中,但问题是这个异常将至少抛出两个我必须单独处理的场景:

1)连接本身的错误,或者出现故障或类型不匹配的参数; 和

2)我RAISERROR明确使用时出现的错误.

由于这是一个WCF应用程序,我必须根据异常的性质(无论是否由于RAISERROR命令)返回客户端应用程序的不同反馈.那么,我怎样才能区分这两种情况呢?

c# wcf sql-server-2005 sqlexception raiserror

9
推荐指数
2
解决办法
9089
查看次数

使用numba时引发异常

这里开始跟进,我一直在溢出.所以我试图提出一个异常,以便我确切知道哪里出了问题.

我有这样的事情:

@jit
def train_function(X, y, H):
     np.seterr(over="raise", under="raise", invalid="raise")
     # do some stuff, start a double loop, and then do:
     try: 
            z[i,j] = math.exp(-beta[j,i])
     except OverflowError:
            print "Calculation failed! z[i,j] = math.exp(-beta[j,i]), j: " + str(j) + ", i: " +str(i) + ", b: " + str(beta[j,i]) + ", omb: " + str(oneminusbeta[j,i])
            raise    


class MyClass(object):
     # init and other methods
     def train(self, X, y, H):
          train_function(X, y, H)
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

Traceback (most recent call last):
  File "C:\work_asaaki\code\gbc_classifier_train_7.py", …
Run Code Online (Sandbox Code Playgroud)

python numpy raiserror overflow numba

9
推荐指数
1
解决办法
1898
查看次数

如何在SQL raiserror中使用变量

我想表明我int在RAISERROR变量@MaxAmount@MinAmount

Raiserror('Total Amount should be less than %s and Greater than %s',16,1,@MaxAmount,@MinAmount)
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

必须声明标量变量"@MaxAmount".

sql sql-server raiserror

9
推荐指数
2
解决办法
9536
查看次数