字符串或二进制数据将被模糊连接截断错误

时间:2016-01-14 14:09:13

标签: sql join inner-join fuzzy

我有下面的查询,我试图通过所有使用标量值函数的对象,但是我得到一个字符串或二进制数据将被截断错误。请协助。

Select 
    definition 
From
    sys.sql_modules M
Join
    (Select 
        name 
    from 
        sys.objects O
    where 
        type_desc = 'SQL_SCALAR_FUNCTION')T
on 
     '%' + T.name + '%' Like '%' + M.definition +'%'

1 个答案:

答案 0 :(得分:0)

某些返回的记录的长度大于目标列长度。增加目标列的长度。要进一步调试,请在SQL Server上运行以下查询。这将为您提供所需的最小目标列长度,以避免此错误。

Select 
    max(len(definition ))
From
    sys.sql_modules M
Join
    (Select 
        name 
    from 
        sys.objects O
    where 
        type_desc = 'SQL_SCALAR_FUNCTION')T
on 
     '%' + T.name + '%' Like '%' + M.definition +'%'

我注意到在用户发表评论后,您的模式超过了8000个字符限制,因为定义列是varchar(max),并且必须超过8000个字符的长度。

'%' + T.name + '%' Like '%' + M.definition +'%'

MSDN

  

模式 - 是否要搜索特定字符串   match_expression,可以包含以下有效通配符   字符。 pattern最多可以包含8,000个字节。

您可能感兴趣的是

SELECT definition
FROM sys.sql_modules AS M
JOIN
(
SELECT name
FROM sys.objects AS O
WHERE type_desc = 'SQL_SCALAR_FUNCTION'
) AS T
ON M.definition LIKE '%'+T.name+'%'