diff --git a/samples/features/intelligent-query-processing/Intelligent QP Demos WideWorldImportersDW Public Preview - Scalar UDF Inlining.sql b/samples/features/intelligent-query-processing/Intelligent QP Demos WideWorldImportersDW Public Preview - Scalar UDF Inlining.sql index e5b2124a..8b25374f 100644 --- a/samples/features/intelligent-query-processing/Intelligent QP Demos WideWorldImportersDW Public Preview - Scalar UDF Inlining.sql +++ b/samples/features/intelligent-query-processing/Intelligent QP Demos WideWorldImportersDW Public Preview - Scalar UDF Inlining.sql @@ -1,67 +1,72 @@ --- ******************************************************** -- --- Scalar UDF Inlining - --- See https://aka.ms/IQP for more background - --- Demo scripts: https://aka.ms/IQPDemos - --- Demo uses SQL Server 2019 Public Preview and also works on Azure SQL DB - --- Email IntelligentQP@microsoft.com for questions\feedback --- ******************************************************** -- -USE [master]; -GO - -ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150; -GO - -ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; -GO - -USE [WideWorldImportersDW]; -GO - -/* -Adapted from SQL Server Books Online -https://docs.microsoft.com/sql/relational-databases/user-defined-functions/scalar-udf-inlining?view=sqlallproducts-allversions -*/ -CREATE OR ALTER FUNCTION - dbo.customer_category(@CustomerKey INT) -RETURNS CHAR(10) AS -BEGIN - DECLARE @total_amount DECIMAL(18,2); - DECLARE @category CHAR(10); - - SELECT @total_amount = - SUM([Total Including Tax]) - FROM [Fact].[OrderHistory] - WHERE [Customer Key] = @CustomerKey; - - IF @total_amount < 500000 - SET @category = 'REGULAR'; - ELSE IF @total_amount < 1000000 - SET @category = 'GOLD'; - ELSE - SET @category = 'PLATINUM'; - - RETURN @category; -END -GO - --- Before (show actual query execution plan for legacy behavior) -SELECT TOP 100 - [Customer Key], [Customer], - dbo.customer_category([Customer Key]) AS [Discount Price] -FROM [Dimension].[Customer] -ORDER BY [Customer Key] -OPTION (RECOMPILE,USE HINT('DISABLE_TSQL_SCALAR_UDF_INLINING')); - --- After (show actual query execution plan for Scalar UDF Inlining) -SELECT TOP 100 - [Customer Key], [Customer], - dbo.customer_category([Customer Key]) AS [Discount Price] -FROM [Dimension].[Customer] -ORDER BY [Customer Key] -OPTION (RECOMPILE); - - +-- ******************************************************** -- +-- Scalar UDF Inlining + +-- See https://aka.ms/IQP for more background + +-- Demo scripts: https://aka.ms/IQPDemos + +-- Demo uses SQL Server 2019 Public Preview and also works on Azure SQL DB + +-- Email IntelligentQP@microsoft.com for questions\feedback +-- ******************************************************** -- +USE [master]; +GO + +ALTER DATABASE [WideWorldImportersDW] SET COMPATIBILITY_LEVEL = 150; +GO + +ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; +GO + +USE [WideWorldImportersDW]; +GO + +/* +Adapted from SQL Server Books Online +https://docs.microsoft.com/sql/relational-databases/user-defined-functions/scalar-udf-inlining?view=sqlallproducts-allversions +*/ +CREATE OR ALTER FUNCTION + dbo.ufn_customer_category(@CustomerKey INT) +RETURNS CHAR(10) AS +BEGIN + DECLARE @total_amount DECIMAL(18,2); + DECLARE @category CHAR(10); + + SELECT @total_amount = + SUM([Total Including Tax]) + FROM [Fact].[OrderHistory] + WHERE [Customer Key] = @CustomerKey; + + IF @total_amount < 500000 + SET @category = 'REGULAR'; + ELSE IF @total_amount < 1000000 + SET @category = 'GOLD'; + ELSE + SET @category = 'PLATINUM'; + + RETURN @category; +END +GO + +SELECT * FROM sys.sql_modules +WHERE object_id = OBJECT_ID('ufn_customer_category') +GO + +-- Before (show actual query execution plan for legacy behavior) +SELECT TOP 100 + [Customer Key], [Customer], + dbo.ufn_customer_category([Customer Key]) AS [Discount Price] +FROM [Dimension].[Customer] +ORDER BY [Customer Key] +OPTION (RECOMPILE,USE HINT('DISABLE_TSQL_SCALAR_UDF_INLINING')); +GO + +-- After (show actual query execution plan for Scalar UDF Inlining) +SELECT TOP 100 + [Customer Key], [Customer], + dbo.ufn_customer_category([Customer Key]) AS [Discount Price] +FROM [Dimension].[Customer] +ORDER BY [Customer Key] +OPTION (RECOMPILE); +GO +