0
私はSQL Server 2008 R2を実行しています。私は、アドレスの部分を連結し、画面に表示するためにフォーマットされた結果を返すスカラ関数を書いています。しかし、私が返すのは@Address変数です。都市、州、ジップ、国は決して価値に追加されません。これは単純でなければなりません。私は何を間違えているのですか?関数内の変数を連結できません
これは私のスカラー関数である:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
;
ALTER FUNCTION [dbo].[fnScreenAddress] (@Id INT)
RETURNS VARCHAR(50)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @ScreenAddress VARCHAR(50), -- The return value
@Address VARCHAR(64),
@UnitNumber VARCHAR(16),
@City VARCHAR(50),
@State CHAR(2),
@PostalCode VARCHAR(16),
@CountryCode VARCHAR(16);
SELECT
@Address = [Address],
@UnitNumber = ISNULL([UnitNumber], ''),
@City = [City],
@State = [State],
@PostalCode = [PostalCode],
@CountryCode = ISNULL([CountryCode], '')
FROM
[dbo].[LPAddress]
WHERE
[ID] = @Id;
SET @ScreenAddress = @Address;
IF @City <> ''
BEGIN
SET @ScreenAddress = @ScreenAddress + ', ';
END;
SET @ScreenAddress = @ScreenAddress + @City;
IF @State <> ''
BEGIN
SET @ScreenAddress = @ScreenAddress + ', ';
END;
SET @ScreenAddress = @ScreenAddress + @State;
SET @ScreenAddress = @ScreenAddress + @PostalCode;
SET @ScreenAddress = @ScreenAddress + @CountryCode;
SET @ScreenAddress = LTRIM(RTRIM(@ScreenAddress));
RETURN(@ScreenAddress);
END;
はそれをテストするために、私は、クエリウィンドウで次のコマンドを入力します。
select
id, address, city, state, postalcode, countrycode,
dbo.fnScreenAddress(id) as [ScreenAddress]
from
lpaddress;
を取得
FYIでは、SSMSのストアドプロシージャをデバッグできます。コードをステップバイステップで実行し、どこが間違っているかを確認することができます。参照:https://technet.microsoft.com/en-us/library/cc646018.aspx – Blorgbeard
'lpaddress.address'は固定長のcharフィールドですか? '@ ScreenAddress'を' MAX'に設定してみてください。 – Malk
@Malk(at)ScreenAddressをVARCHAR(MAX)に変更しました。しかし、ScreenAddressを構築するために使用される各フィールドをトリミングすることで、この問題が解決されました。フィールドはDB内のCHAR(何か)として定義されているので、それが問題の起源だと思います。私はこれを修正するためにDBAを取得しなければなりませんが(これは現実の世界ですが)、その間にこれは機能します。ヒントありがとう! –