[英]SQL User Defined Functions
我目前正在使用用户定义函数,并且很难理解有关函数如何接受一个参数并返回另一个参数的概念。
我有一个包含员工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
)
仅供参考...您的第一个函数很好,并且完全符合我认为的要求...我认为您可能没有正确调用该函数。
我测试如下
/*
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.