我写了下面的函数。
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-worksterri0
我在这里犯了错误。只有第一个角色来了。需要改变什么吗?
更改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,以便优化器有更多选择。