将SQL Server 8转换为11时出错

将SQL Server 8转换为11时出错,sql,sql-server,tsql,Sql,Sql Server,Tsql,我已经将一个数据库从旧的传统MSSQL server 2000(SQL server 8)移动到SQL server 11,并且在几个触发器中收到一些错误 它们是这样形成的 RAISERROR 20001 @msg 及 因此,经过一些阅读,我发现这是一个已知的变化,但我找不到任何好的已知解决方案 起初我想把它们换成这样 RAISERROR ('Field ''comp_v1'' cannot contain a null value.',16,-1) 这里的问题是,我不知道这有什么影响,如果

我已经将一个数据库从旧的传统MSSQL server 2000(SQL server 8)移动到SQL server 11,并且在几个触发器中收到一些错误

它们是这样形成的

RAISERROR 20001 @msg

因此,经过一些阅读,我发现这是一个已知的变化,但我找不到任何好的已知解决方案

起初我想把它们换成这样

RAISERROR ('Field ''comp_v1'' cannot contain a null value.',16,-1)
这里的问题是,我不知道这有什么影响,如果有任何好的直接转换从旧的行到新的行


我假设代码44444和20001等是有原因的。

我建议您使用
THROW
关键字来抛出错误。您可以检查以下各项:

使用THROW的好处是:不必传递任何参数来引发异常。 仅仅使用投掷;语句将获取错误详细信息并引发它

鉴于有错误

对于RAISERROR,开发人员必须使用不同的ERROR_xxxx()系统函数来获取要通过RAISERROR()语句传递的错误详细信息,如:

  • 错误号()
  • 错误消息()
  • 错误\u严重性()
  • 错误状态()

所以解决方法就是抛出?从旧到新没有神奇的转换?系统是否会像对待
RAISERROR
一样使用
THROW
执行操作?@ThomasAndreèLian:-是的,您可以使用THROW。它与RAISERROR的作用相同,因此您不必关心错误消息和所有其他内容:)有没有方法通过THROW传递自定义消息?@ThomasAndreèLian:-@ThomasAndreèLian:-一旦您执行了RAISERROR或THROW,您通常会调用RETURN。您还可以检查此线程:
RAISERROR ('Field ''comp_v1'' cannot contain a null value.',16,-1)