次の関数を書きました。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION NameFunction
(
@eid int
)
RETURNS varchar
AS
BEGIN
Declare @logid varchar(50);
SELECT @logid = E.LoginId from HumanResources.Employee As E
where E.BusinessEntityID = @eid
RETURN @logid
END
GO
実行すると、結果がa
として表示されます。しかし、期待される結果はadventure-works\terri0
私がここでミスをした場所。最初のキャラクターのみが来ます。何か変更する必要がありますか?
RETURN
タイプを変更して長さを含めると、この時点で1文字が返されます。
RETURNS varchar(100)
完全なコード:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create FUNCTION NameFunction
(
@eid int
)
RETURNS varchar(100) -- or whatever length you need
AS
BEGIN
Declare @logid varchar(50);
SELECT @logid = E.LoginId from HumanResources.Employee As E
where E.BusinessEntityID = @eid
RETURN @logid
END
GO
_RETURNS varchar
_はRETURNS varchar(50)
でなければなりません。
長さを指定しないvarchar
は、このコンテキストではvarchar(1)
と解釈されます(CAST
のコンテキストではvarchar(30)
と解釈されます)。
ところで、データアクセスを行うスカラーUDFはパフォーマンスを低下させる可能性があります。少なくともこの インラインTVFとして を書き換えて、オプティマイザーがより多くのオプションを持つようにすることを検討してください。