Presentation is loading. Please wait.

Presentation is loading. Please wait.

Www.NovickSoftware.com User-Defined Functions in SQL Server 2005 Andrew Novick 2007.

Similar presentations


Presentation on theme: "Www.NovickSoftware.com User-Defined Functions in SQL Server 2005 Andrew Novick 2007."— Presentation transcript:

1 www.NovickSoftware.com User-Defined Functions in SQL Server 2005 Andrew Novick 2007

2 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Agenda What are User-Defined Functions – Three types: Scalar In-Line Table Valued Multi-statement Table Valued Why use User-Defined Functions What You Cant Do With UDFs and Why! Formatting, Naming and Documenting UDFs for Reuse Debugging, Encryption and Schemabinding Performance Implications of UDFs System functions

3 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Transact-SQL User-Defined Functions

4 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Novick Software The consulting company of Andrew Novick Business Applications Design, Architecture, Programming, Project Management, Coaching SQL Server, VB.Net, ASP.Net, XML http://www.NovickSoftware.com Home of the http://www.NovickSoftware.com

5 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com What are User-Defined Functions? Transact-SQL routines used to encapsulate program logic.

6 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Types of UDFs T-SQL Scalar UDF T-SQL Inline Table-valued UDF T-SQL Multi-statement Table-valued UDF CLR Scalar CLR Multi-Row CLR Aggregate

7 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com T-SQL: Scalar T-SQL routine with zero or more parameters Returns a single scalar value CREATE FUNCTION udf_Area ( @Length float, @Width float ) RETURNS float AS BEGIN RETURN @Length * @Width END

8 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com T-SQL: Inline A View with parameters CREATE FUNCTION dbo.udf_AuthorsByLetter ( @Letter CHAR(1) ) RETURNS TABLE AS RETURN SELECT * FROM pubs..Authors WHERE LEFT(au_lname, 1) = @Letter

9 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com T-SQL: Multistatement Returns a single defined table CREATE FUNCTION dbo.udf_FactorialsTAB (@N int ) RETURNS @Factorials TABLE (Number INT, Factorial INT) AS BEGIN DECLARE @I INT, @F INT SELECT @I = 1, @F = 1 WHILE @I < = @N BEGIN SET @F = @I * @F INSERT INTO @Factorials VALUES (@I, @F) SET @I = @I + 1 END -- WHILE RETURN END

10 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com CLR: Scalar A C# or VB.Net shared function bound to a SQL Function definition

11 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com CLR: Multi-Row A C# or VB.Net Structure or Class that returns a resultset.

12 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com CLR: Aggregate A C# or VB.Net Structure or Class implementing a required set of methods to produce an aggregate result

13 www.NovickSoftware.com T-SQL User Defined Functions

14 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Scalar User-Defined Functions (1) Written in T-SQL like a stored procedure Takes zero or more parameters Return a single value of a scalar data type: int varchar (30) numeric (18,3) varchar(max) varbinary(max) Does not return Text, Timestamp, Image

15 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Scalar User-Defined Functions (2) CREATE FUNCTION udf_Area ( @Length float, @Width float ) RETURNS float AS BEGIN RETURN @Length * @Width END

16 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Using Scalar UDFs SELECT List – SELECT dbo.udf_Area(5.5, 4) – SELECT … dbo.udf_Area (measured_length * 1000, total_width) FROM… WHERE CLAUSE JOIN CLAUSE ORDER BY

17 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Ways to Use Scalar User-Defined Functions? In the SELECT list In the WHERE clause In a CHECK Constraint In the ON clause of a JOIN In an ORDER BY clause

18 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Data Manipulation in T-SQL UDFs May SELECT from tables and views May not INSERT UPDATE or DELETE Except to TABLE variables SELECT dbo.udf_Addr_ZIP5DistanceMI ('02451', '98052')

19 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Profiling UDF Execution Turn on T-SQL Statement Start/Complete events. SQL Profiler has a big impact on duration and CPU time. Its difficult to use it as a measure of performance for UDFs of T-SQL Statement events are on.

20 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Debugging Scalar UDFs in SQL Server 2000 Query Analyzer Debug Menu is Disabled To Debug create a Stored Procedure – Call the UDF in the SP – Step into the UDF Visual Studio.Net Server Explorer allows for direct debugging Every instance of SQL Server must be run as a domain user, not LocalSystem

21 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Debugging Scalar UDFs in SQL Server 2005 Use Visual Studio 2005 database project

22 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Things You Cant Do in UDFs INSERT, UPDATE, DELETE rows – Except to TABLE variables – Not to TEMP tables Execute Stored Procedures – Extended SPs that dont return rowsets are OK DBCC RAISERROR PRINT Use nondeterministic built-in functions! BEGIN CATCH…. END TRY

23 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Deterministic Functions Deterministic functions return the same result any time they are called with a specific set of input values. Udf_Area (5.5, 4) Non-deterministic functions dont. Getdate(), RAND()

24 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Inline Table-Valued UDFs Return TABLE Are equivalent to a VIEW with parameters. INSERT, UPDATE, DELETE are possible

25 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Multistatement Table-Valued UDFs Return a table thats defined in the header Multiple T-SQL statements Cant change the state of the database My use extended stored procedures that dont return rowsets

26 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Encrypting UDFs Protects the text of the UDF Add the with Encryption keyword CREATED FUNCTION udf_xxx () Returns With Encryption SQL Server 2000 encryption has been broken! Dont count on it.

27 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Schemabinding Create Function () WITH SCHEMABINDING Prevents the alteration of database objects that are referenced by the UDF All objects UDFs and Views referenced must also be schemabound. All Objects referenced must use two part names.

28 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Schemabinding Recommendations Always bind scalar UDFs when they dont reference any other object. Bind UDFs that reference data only when you have a special reason to do so. Bind inline and multistatement UDFs only to protect your schema from changes.

29 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Error Handling You will not get the same chance to handle run-time errors that you do in stored procedures or triggers For scalars, the best solution is usually to return NULL as the result of the function. BEGIN CATCH…. END TRY not allowed! Errors can be reported in the SQL Log.

30 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com System UDFs (1) Defined in master Owned by system_function_schema Begin with fn_ All lower case letters Referenced with special :: syntax

31 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com CLR Functions In SQL Server 2005 Scalar User Defined Functions Multi-Row User Defined Functions User Defined Aggregate

32 www.NovickSoftware.com SQLCLR Functions

33 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Types of SQLCLR Code in S2K5 Stored Procedures User Defined Functions User Defined Aggregates User Defined Types Triggers

34 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Assemblies.Net Code compiled into an IL DLL Assemblies must be added to S2K5 with CREATE ASSEMBLY Bits are stored in the databases sys.assembly_files table CREATE ASSEMBLY my_assembly_name FROM \\myserver\directory…path\MyAssembly.dll

35 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Code Access Security PERMISSION_SETs SAFE EXTERNAL_ACCESS UNSAFE

36 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com PERMISSION_SET: Safe May not access external resources: registry, file system, or network May not use unmanaged code or PInvoke May access data using the current context but not via SQLClient or any other data provider No thread processing

37 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com PERMISSION_SET: EXTERNAL_ACCESS May access external resources: registry, file system, network, environment variables May not use unmanaged code or PInvoke

38 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com PERMISSION_SET: UNSAFE May access external resources May use unsafe code and PInvoke Can use SQLClient and other data providers Can use thread constructs This is no more unsafe than extended stored procs

39 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com SQLCLR User-Defined Functions Scalar – Return a single value Multi-Statement UDFs – Returns a single result set No.Net Inline UDFs

40 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Creating a Scalar UDF Create the assembly first Then the T-SQL definition: CREATE FUNCTION udf_myFunction ( @Parm1 int -- First Parameter, @Parm2 varcharmax – 2nd Parm ) RETURNS BIT EXTERNAL NAME assemblyname.class.method

41 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Creating Table Valued UDF Create the assembly Method returns an IEnumerable CREATE FUNCTION script defines the schema of the result

42 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Type Considerations.Net reference types dont represent NULL System.Data.SQLTypes represent NULL Use the SQLTypes when possible

43 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Inprocess Data Provider System.Data.SQLServer Provider Implements the IData* interfaces Parallels the SQLClient Provider Exposes Additional Classes via SQLContext

44 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com User Defined Aggregates Aggregates scalar values into another scalar Uses the SqlUserDefinedAggregate attribute CREATE AGGREGATE [Product](@Value float) Returns [float] EXTERNAL NAME [SampleAggregate].[SampleAggregate.Product] go GRANT EXEC ON dbo.Product TO PUBLIC go

45 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com User Defined Aggregate Class public class myAggregate { public void Accumulate ( value) { } public Terminate() { } public void Init () { } public void Merge (myAggregate) { } }

46 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Using the User Defined Aggregate SELECT dbo.product(sample) [Three integers] FROM (SELECT CAST(1.0 as float) as Sample UNION ALL SELECT 3 UNION ALL SELECT 5 ) Numbers (Result) Three integers --------------- 15

47 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Performance Experiment Test on 1,000,000 row table pinned in memory 2 CPU system TestCPUElapsed Query #0Scan Table0.80.4 Query #1Udf_txt_CharIndexRev114.0172.3 Query #2Equivalent SQL2.91.5 Query #3CharIndexRev (.Net)44.952.8

48 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Best Practices Pick one.Net language Build assemblies with SQL Server in mind Use the most restrictive Permission Set possible Move as much.Net/CLR code to the middle tier as possible Test via the SQL Interface

49 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why Use.Net in S2K5 Replace Extended SPs with a safer alternative Replace COM automation: sp_OA_* Take advantage of.Net Framework classes Run compute intense algorithms Reuse code Programmer productivity New capabilities not available in T-SQL – User Defined Types – User Defined Aggregates

50 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why Use SQLCLR in S2K5 Encapsulation – Functions and Aggregates allow the encapsulation of business rules in reusable form.

51 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why SQLCLR in S2K5 Many tasks that were awkward or difficult to perform in Transact-SQL can be better accomplished by using managed code..."

52 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why Not use SQLCLR in S2K5 We used to joke that SQL stood for "Scarcely Qualifies as a Language" because it has no I/O and can't format output. Its math library is limited because it isn't a computational language. It doesn't do text searching, list processing, or graphics. The only purposes of SQL are data management and retrieval. Period. Joe Cleko

53 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why Not Use SQLCLR in S2K5 $

54 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why Not Use SQLCLR in S2K5 (2) Scalability – Application servers MAY scale out easily – Web servers USUALLY scale out easily – Desktops ALMOST ALWAYS scale out – Scaling up SQL Server is expensive

55 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Why Not use.Net in S2K5 (3) Compare cost per CPU with software licenses: Compute LocationExtra Costs~$/CPU Database ServerAdvanced OS SQL Enterprise Management Tools $20,000 To $50,000 Web ServerManagement Tools$4,000 Desktop$1,000

56 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Download Code Samples Code samples are available with this presentation at: www.NovickSoftware.com/Presentations.htm

57 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Transact-SQL User-Defined Functions

58 © Copyright 2003-2007 Andrew Novick All rights reserved. www.NovickSoftware.com Thanks for coming! Please send feedback to: anovick@NovickSoftware.com


Download ppt "Www.NovickSoftware.com User-Defined Functions in SQL Server 2005 Andrew Novick 2007."

Similar presentations


Ads by Google