この質問は SQL Server 2005 に関するものです。2 つの UDF があり、1 つは 2 つの列を含む国コード テーブルを検索します。国の略語を含む「コード」と国名を含む「名前」。これらの UDF はどちらもアドレスを渡され、文字列を分割する UDF で分割されている文字列に基づいてルックアップを行います。
例えば:
SELECT dbo.GetCountryName('SAMPALOC MANILA PHILIPPINES 1000')
「フィリピン」を返し、
SELECT dbo.GetCountryCode('SAMPALOC MANILA PHILIPPINES 1000')
「PH」を返します。
これらは完全に機能していますが、REPLACE ステートメントで使用すると、次のようになります。
SELECT REPLACE(('SAMPALOC MANILA PHILIPPINES 1000'),
(SELECT dbo.GetCountryName('SAMPALOC MANILA PHILIPPINES 1000')),
(SELECT dbo.GetCountryCode('SAMPALOC MANILA PHILIPPINES 1000')))
「SAMPALOC MANILA PHILIPPINES 1000」と表示されますが、必要なのは「SAMPALOC MANILA PH 1000」です。アドレス全体の長さが 60 を超える場合は、これを行う必要があります。
これを REPLACE ステートメントに入れると、これが失敗する理由がわかりません。他の誰かがこれに遭遇しましたか、またはなぜこれが起こっているのか考えていますか?