我目前正在使用用户自定义函数,并且很难掌握关于函数如何接受一个参数并返回另一个参数的概念。
我有一张包含员工ID和日志ID的表。 UDF应接受EmployeeID并返回UserLoginID。 UserLoginID是'\'之后的LogID列的最后一部分。我需要从表中返回整个列。
表示例
EmployeeID LoginId
1 database\userid1
2 database\userid2
3 database\userid3
UDF查询1:
CREATE FUNCTION dbo.fx_IDtest]
(@EmployeeID int)
RETURNS nvarchar(50)
AS
BEGIN
DECLARE @UserID nvarchar(50)
SET @UserID = (SELECT SUBSTRING(LoginID,CHARINDEX('\',LoginID)+1, LEN(LoginID))
FROM HumanResources.Employee
WHERE EmployeeID = @EmployeeID
)
RETURN @UserID
END
UDF查询2:
CREATE FUNCTION [dbo].[fx_IDtest2]
(@EmployeeID int)
RETURNS table
AS
RETURN
(SELECT SUBSTRING(LoginID,CHARINDEX('\',LoginID)+1, LEN(LoginID)) as USERID
FROM HumanResources.Employee
WHERE EmployeeID = @EmployeeID
)
答案 0 :(得分:0)
仅供参考...你的第一个功能很好,完全符合我的要求......我想也许你并没有正确地调用这个功能。
我测试了它如下......
/*
CREATE TABLE testDATA (EmployeeID int, LoginID nvarchar(50))
insert into testDATA
select 1, 'database\userid1' union
select 2, 'database\userid2' union
select 3, 'database\userid3'
CREATE FUNCTION dbo.fx_IDtest
(@EmployeeID int)
RETURNS nvarchar(50)
AS
BEGIN
DECLARE @UserID nvarchar(50)
SET @UserID = (SELECT SUBSTRING(LoginID,CHARINDEX('\',LoginID)+1, LEN(LoginID))
FROM testDATA
WHERE EmployeeID = @EmployeeID
)
RETURN @UserID
END
*/
SELECT *, dbo.fx_IDtest(EmployeeID)
FROM testDATA
WHERE EmployeeID = 1
SELECT dbo.fx_IDtest(1)
两个select语句都给我userid1
作为回报。
请注意,您必须在SELECT
中提供UDF的架构,这经常被忽略。您无法执行SELECT fx_IDtest(1)
,而必须执行SELECT dbo.fx_IDtest(1)