I have a sp that needs to show some lookup values from another table that stores custom field labels and values.
I wrote a couple table valued inline udf's as below:
This one retuns a custom value based on a passed label and FileKey
USE [CorpInfo]
GO
/****** Object: UserDefinedFunction [dbo].[GetCustomFieldValue] Script Date: 08/09/2013 12:52:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetCustomFieldValue]
(
@FieldName nvarchar(50),
@FileKey int
)
RETURNS TABLE
AS
RETURN
(
SELECT view_Attendance_EmployeeFields.ASSTRING
FROM view_Attendance_CustomFields LEFT OUTER JOIN
view_Attendance_EmployeeFields ON view_Attendance_CustomFields.UNIQUEID = view_Attendance_EmployeeFields.FIELDID
WHERE (view_Attendance_CustomFields.NAME = @FieldName) AND (view_Attendance_EmployeeFields.FileKey = @FileKey)
)
This one gets an employee photo:
USE [CorpInfo]
GO
/****** Object: UserDefinedFunction [dbo].[GetEmpPhoto] Script Date: 08/09/2013 12:55:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[GetEmpPhoto]
(
@FileKey int
)
RETURNS TABLE
AS
RETURN
(
SELECT view_Attendance_EmpPhoto.UserData
FROM view_Attendance_EmpPhoto
WHERE view_Attendance_EmpPhoto.FileKey = @FileKey
)
Here is the sp that uses these udf's
ALTER PROCEDURE [dbo].[GetDirList_CorpDirIOHR]
-- Add the parameters for the stored procedure here
@Lastname as varchar(10) = null,
@Firstname as varchar(10) =null ,
@Facility as integer,
@Department as integer
AS
BEGIN
begin
if @Lastname is null
set @Lastname = ''
if @Firstname is null
set @Firstname =''
end
IF @Facility =0 AND @Department = 0
SELECT view_Attendance_Employees.FileKey,
Case when Select ASSTRING FROM GetCustomFieldValue('Preferred First Name', view_Attendance_Employees.FileKey) = ''
then view_Attendance_Employees.FirstName
else Select ASSTRING FROM GetCustomFieldValue('Preferred First Name', view_Attendance_Employees.FileKey)
end as FirstName
+ ' ' + view_Attendance_Employees.LastName AS Name,
OrganizationalUnit.OrgUnitName,
view_Attendance__WORKGROUP1.NAME AS Facility,
CASE WHEN Select ASSTRING FROM GetCustomFieldValue('Plascore Desk Phone', view_Attendance_Employees.FileKey) = ''
OR Select ASSTRING FROM GetCustomFieldValue('Plascore Desk Phone',view_Attendance_Employees.FileKey) = '0'
THEN ' ' ELSE
Select ASSTRING FROM GetCustomFieldValue('Plascore Desk Phone',view_Attendance_Employees.FileKey)
END AS Ext,
CASE WHEN Select ASSTRING FROM GetCustomFieldValue('Plascore Cell Phone',view_Attendance_Employees.FileKey) = ''
OR Select ASSTRING FROM GetCustomFieldValue('Plascore Cell Phone',view_Attendance_Employees.FileKey) = '0'
THEN ' '
ELSE '(' + LEFT(Select ASSTRING FROM GetCustomFieldValue('Plascore Cell Phone',view_Attendance_Employees.FileKey), 3) + ') ' +
LEFT(RIGHT(Select ASSTRING FROM GetCustomFieldValue('Plascore Cell Phone',view_Attendance_Employees.FileKey), 7), 3) + ' - ' + RIGHT(Select ASSTRING FROM GetCustomFieldValue('Plascore Cell Phone',view_Attendance_Employees.FileKey), 4)
END AS Cell,
Select ASSTRING FROM GetCustomFieldValue('Plascore Email Address',view_Attendance_Employees.FileKey) as Email,
Employee.JobTitle,
SELECT UserData FROM GetEmpPhoto(view_Attendance_Employees.FileKey,view_Attendance_Employees.FileKey) AS PIC,
view_Attendance_Employees.FirstName,
view_Attendance_Employees.LastName,
case when SELECT cnt FROM GetEmpPunchStatus(@File) % 2 = 0
then 'OUT'
else 'IN' end as EmpINOUT,
view_Attendance_Employees.FileKey
FROM Employee WITH (nolock)
INNER JOIN view_Attendance_Workgroup1 WITH (nolock) ON view_Attendance_Employees.WG1 = view_Attendance_Workgroup1.WGNUM
LEFT OUTER JOIN view_Attendance_Transactions ON view_Attendance_Employees.FileKey = view_Attendance_Transactions.FileKey
WHERE (view_Attendance_Employees.Status = 1) AND (view_Attendance_Employees.Badge > 0) AND (view_Attendance_Employees.LastName LIKE CASE WHEN ltrim(rtrim(@LastName))
LIKE '' THEN '%' ELSE '%' + @LastName + '%' END) AND (view_Attendance_Employees.FirstName LIKE CASE WHEN ltrim(rtrim(@FirstName))
LIKE '' THEN '%' ELSE '%' + @FirstName + '%' END)
ORDER BY FirstName,FacilitySo basically am I using the right idea to use udf's as "look up" functions, and have I coded the used of them the right way?