SQL Server - Scalar UDFs vs Inline
Scalar UDFs are good if you're working with a handful of rows or a variable. However, when you throw a lot of rows at them, they generally slow down your queries.Microsoft recommends inlining them whenever possible. Microsoft Website. Let's see if they are right.
CREATE TABLE dbo.ProperCasing
(
IDCol int not null identity primary key,
StringCol varchar(500)
)
(StringCol)
SELECT ('This object has the name ' + OBJECT_NAME(Object_Id))
FROM sys.Objects
GO 1000
CREATE FUNCTION dbo.ProperCase
(
@vch_Input varchar(1000)
)
RETURNS varchar(1000)
AS
BEGIN
DECLARE @vch_Output varchar(1000);
SELECT @vch_Output = STRING_AGG(UPPER(LEFT(T.Value, 1)) + LOWER(RIGHT(T.Value, LEN(T.Value)-1)), ' ')
FROM (SELECT Value FROM String_Split(@vch_Input, ' ')) T
RETURN (@vch_Output);
END
SELECT IDCol, dbo.ProperCase (StringCol) AS ProperCased
FROM dbo.ProperCasing
ORDER BY IDCol
SELECT IDCol, STRING_AGG(UPPER(LEFT(Value, 1)) + LOWER(RIGHT(Value, LEN(Value)-1)), ' ') X
FROM dbo.ProperCasing
CROSS APPLY String_Split(StringCol, ' ')
GROUP BY IDCol
ORDER BY IDCol
Comments
Post a Comment