繁体   English   中英

替换语句:字符串或二进制数据将被截断 - NVARCHAR(最大)

[英]Replace Statement: String or binary data would be truncated - NVARCHAR(max)

我有一个过程,以前从我的数据库中的存储过程中取出字符串,并替换某些表并通过长替换函数删除过程的大块。 然后,我将使用此操纵的字符串创建一个新过程

它工作了大约2个月,但最近我收到了错误消息

Msg 8152,Level 16,State 10,Line 2
字符串或二进制数据将被截断

我已经尝试更改数据类型并删除每个替换语句,但它在第一个替换语句上出错,这使我认为它是数据类型或我的初始操作的问题。

任何帮助将非常感激。

DECLARE @PriorityProcedureString AS VARCHAR(MAX)

SET @PriorityProcedureString = 
(SELECT 
     /*1*/REPLACE(
     /*1*/OBJECT_DEFINITION(object_id(ROUTINE_NAME)),
    (SUBSTRING (OBJECT_DEFINITION(object_id(ROUTINE_NAME)), -- String 
                CHARINDEX('µ',OBJECT_DEFINITION(object_id(ROUTINE_NAME))), -- Start_Position
                (CHARINDEX('!',OBJECT_DEFINITION(object_id(ROUTINE_NAME))) - CHARINDEX('µ',OBJECT_DEFINITION(object_id(ROUTINE_NAME))))-- Length
                )
    )   
                                                                                    ,''
                                                                                    )
            FROM INFORMATION_SCHEMA.ROUTINES
            WHERE specific_name LIKE 'usp_Cs_Coll_NBA_Priority_And_Exclusions'
)

SELECT @PriorityProcedureString

-- EXEC @PriorityProcedureString

这是因为某些代码的长度超过了8,000个字符。 CHARINDEX有8,000个字符的限制。

https://docs.microsoft.com/en-us/sql/t-sql/functions/charindex-transact-sql?view=sql-server-2017

对原始问题的道歉意识到问题是什么并不是很清楚。 我无法识别问题,但怀疑REPLACE函数可能有字符限制,一旦第一个REPALCE被解析,它可能会在转移到下一个REPLACE之前截断我的字符串?

相反,我把它放入变量并按步骤完成替换语句,这不会给我任何错误。

此代码的基本目标是仅使用现有的实时过程来填充业务关键表,并用虚拟表或模拟表替换其中的所有表,以便我可以使用不同的逻辑输出结果,而不会影响任何生命过程。 我想这样做,因为每天都会由不同的SQL用户更改过程,因此手动编写脚本会使“模拟”过程过时。

如果有人能够更有效地进行这种欣赏,如果你可以分享,因为下面的解决方案很麻烦,并且每当添加新表时都需要手动更新。

/******************************************************************************************
    * Put Procedure Text Into String *
    *******************************************************************************************/

SET @Priority_ExecutableString = (
                       SELECT OBJECT_DEFINITION(object_id(ROUTINE_NAME))
                       FROM INFORMATION_SCHEMA.ROUTINES
                       WHERE specific_name LIKE 'usp_Cs_Coll_NBA_Priority_And_Exclusions'
                       )

/******************************************************************************************
*   Use Substring To Remove Parts Of String *
* As defined by the µ start and ! End Points In The Original Procedure
*******************************************************************************************/

SET @StringIWantToRemove = 
(
SELECT SUBSTRING (@Priority_ExecutableString, -- String 
CHARINDEX('µ',@Priority_ExecutableString), -- Start_Position
(CHARINDEX('!',@Priority_ExecutableString) - CHARINDEX('µ',@Priority_ExecutableString)))-- Length
)



   SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, @StringIwantToRemove,''))

/**************************************************************************************

    ****
    *   Step 2 : Replace Defaulted 'Create Procedure' With 'Alter Procedure'
    *******************************************************************************************/

SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, 'Create Procedure', 'ALTER PROCEDURE'))

/******************************************************************************************
*   Step 3 : Replace Original Procedure Name With Simulation Procedure Name
*******************************************************************************************/

SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, '[dbo].[usp_Cs_Coll_NBA_Priority_And_Exclusions]','[dbo].[usp_Cs_Coll_NBA_Priority_And_Exclusions_Simulation]'))

/******************************************************************************************
*   Step 4 : Replace Offer_Stage Table With Offer_Stage Simulation Table
*******************************************************************************************/

SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, 'WORKDBOPS_NBA.dbo.t_CS_Coll_NBA_offer_stage','WORKDBOPS_NBA.dbo.t_CS_Coll_NBA_offer_stage_Simulation'))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM