1

スカラー値関数を使用するすべてのオブジェクトを取得しようとしている以下のクエリがありますが、文字列またはバイナリ データが切り捨てられたエラーになります。手伝ってください。

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 +'%'
4

1 に答える 1

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 +'%'

ユーザーのコメントの後、定義列が varchar(max) であり、8000 文字を超える長さでなければならないため、パターンが 8000 文字の制限を超えていることに気付きました。

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

MSDN

pattern - 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+'%' 
于 2016-01-14T14:21:53.093 に答える