21

次の関数を書きました。

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 、ここで間違いを犯した場所です。最初のキャラクターのみ登場。何かを変更する必要がありますか?

4

2 に答える 2

27

タイプを変更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
于 2012-09-25T10:30:01.330 に答える
13

RETURNS varcharである必要がありますRETURNS varchar(50)

varcharvarchar(1)長さが指定されていない場合は、このコンテキスト(およびvarchar(30)のコンテキスト)のように解釈されますCAST

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

于 2012-09-25T10:29:57.907 に答える