我们已将SQL Serer 2008数据库(现在已脱机且无法访问它)迁移到SQL Server 2016.此错误开始发生
错误51001,严重级16,状态1被引发,但在sys.messages中找不到具有该错误号的消息。如果错误大于50000,请确保使用sp_addmessage添加用户定义的消息。
所以我不知道原始DBA或开发人员是否在旧版本中添加了自定义消息。 “2008”版本是否“宽容”,因为如果自定义错误存储在用户定义的表而不是sys.messages中,则异常会查询此表并使用自定义消息。我希望我能说清楚。
这里的代码,使用此代码在kine上发生错误
SET @XML = (SELECT [dbo].[fn_BuildXMLBody](@XML, @sErrMsg, @ID,'5100100401001'))
CREATE PROCEDURE [dbo].[sp_ESI_AddLanguageTypeDev]
@vLang VARCHAR(2) --Required Parameter
AS
BEGIN
SET NOCOUNT ON
DECLARE
@iRetVal INT,
@sProcName VARCHAR(100),
@sErrMsg VARCHAR(500),
@iCount INT,
@vErr VARCHAR(5) --Indicates if errors have occurred.
DECLARE
@XML varchar(7960),
@XMLHeader VARCHAR(20),
@XMLFooter VARCHAR(20),
@ID int
DECLARE @intEq_ID INT
SET @XMLHeader = (SELECT [dbo].[fn_BuildXMLHeader]())
SET @ID = '51001'
SET @sProcName = 'sp_ESI_AddLanguageType'
SET @vErr = 'False'
SET @vLang = RTRIM(LTRIM(@vLang))
IF exists (SELECT Lang
FROM dbo.Language
WHERE Lang = @vLang)
BEGIN
SET @vErr = 'True'
SET @sErrMsg = (SELECT [dbo].[fn_GetValidationErrorMessage]('5100100401001'))
SET @XML = (SELECT [dbo].[fn_BuildXMLBody](@XML, @sErrMsg, @ID,'5100100401001'))
END
ELSE
BEGIN
INSERT INTO dbo.Language(
Lang )
VALUES(@vLang)
SELECT @intEq_ID = (SELECT IDENT_CURRENT('dbo.Language'))
IF @@ERROR <> 0
BEGIN
SET @vErr = 'True'
SET @sErrMsg = (SELECT [dbo].[fn_GetValidationErrorMessage]('5100100404001'))
SET @XML = (SELECT [dbo].[fn_BuildXMLBody](@XML, @sErrMsg, @ID,'5100100404001'))
END
END
IF @vErr = 'True'
BEGIN
SET @XMLFooter = (SELECT [dbo].[fn_BuildXMLFooter]())
SET @XML = (@XMLHeader + @XML + @XMLFooter)
-- output the xml as a single parameter
SELECT @XML = LTRIM(RTRIM(@XML))
--RAISERROR @ID @XML
RAISERROR (@ID,
16, 1, @XML);
RETURN -1
END
ELSE
BEGIN
SELECT @intEq_ID as RETURN_CODE
RETURN @intEq_ID
RETURN 0
END
END
GO