web-dev-qa-db-ja.com

関数からvarchar値を返す方法

次の関数を書きました。

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私がここでミスをした場所。最初のキャラクターのみが来ます。何か変更する必要がありますか?

18
Searcher

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
23
Taryn

_RETURNS varchar_はRETURNS varchar(50)でなければなりません。

長さを指定しないvarcharは、このコンテキストではvarchar(1)と解釈されます(CASTのコンテキストではvarchar(30)と解釈されます)。

ところで、データアクセスを行うスカラーUDFはパフォーマンスを低下させる可能性があります。少なくともこの インラインTVFとして を書き換えて、オプティマイザーがより多くのオプションを持つようにすることを検討してください。

11
Martin Smith