sql - 替换语句:字符串或二进制数据将被截断 - 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
推荐阅读
- c# - Unity 错误:异常:Gradle 安装无效
- spring - Spring Boot Jpa JPQL 选择除特定列之外的列
- c# - 一旦引发异常,如何停止等待事件信号
- python - 在 csv 文件中按年份计算值
- python - ValueError:支持的目标类型是:('binary','multiclass')。取而代之的是“连续多输出”
- c - C 从一个文件中读取数据并将其写入另一个文件
- c++ - 在 C++ 中调用虚函数时出现分段错误
- reactjs - 可以将 reactstrap 与 react-hook-form 和 react-input-mask 一起使用吗?
- ruby-on-rails - Rails 在与日期时间相同的数据类型“period_end”上对多个模型进行排序
- amazon-web-services - AWS Elastic BeanStalk 写入 |/usr/sbin/rotatelogs 时出错