迁移后问题(SQL Server 2008到2016)

时间:2017-06-14 19:28:41

标签: sql-server sql-server-2008 tsql sql-server-2016

我们已将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

0 个答案:

没有答案