繁体   English   中英

SQL用户定义函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM