SlideShare a Scribd company logo
Understand when to use user-defined functions in SQL Server | TechRepublic



   ZDNet Asia    SmartPlanet    TechRepublic                                                                                     Log In   Join TechRepublic   FAQ   Go Pro!




                                                    Blogs     Downloads       Newsletters       Galleries      Q&A     Discussions        News
                                               Research Library


     IT Management             Development         IT Support         Data Center        Networks         Security




     Home / Blogs / The Enterprise Cloud                                                   Follow this blog:

     The Enterprise Cloud


     Understand when to use user-
     defined functions in SQL
     Server
     By Tim Chapman
     September 3, 2007, 11:49 PM PDT

     In the simplest terms, a user-defined function (UDF) in SQL Server is a programming construct
     that accepts parameters, does work that typically makes use of the accepted parameters, and
     returns a type of result. This article will cover two types of UDFs: table-valued and scalar-valued.
     (I will not be covering aggregate functions.)




     Types of UDFs
     Table-valued functions
     A table-valued UDF is a function that accepts parameters and returns the results in the form of a
     table. This type of function is special because it returns a table that you can query the results of
     and join with other tables. In SQL Server 2005, field values from other tables may be passed into
     the function during a join operation to return a record based result. To accomplish this, you must
     use SQL Server 2005’s APPLY operator.

     It can be difficult to know when it is appropriate to use a VIEW vs. when it is appropriate to use a
     table-valued UDF. VIEWs are a great tool for data abstraction, combining data, and logically using
     subsets of data. I like to use table-valued UDFs when I need to use one or more values from
     different tables in a join operation where some type of calculation needs to be done and an
     aggregation returned.

     Scalar-valued functions
     A scalar-valued UDF accepts parameters and, ultimately, returns a single, atomic value. There are
     seven reasons why these types of functions are different than stored procedures in the database
     engine.

        You cannot modify data inside of a UDF.
        A scalar-valued UDF returns only one value, where a stored procedure can have numerous
        OUTPUT parameters.
        You can use scalar-valued UDFs as the default value for a column in a table.
        Scalar-valued UDFs are an easy way to define constant values to use in your database
        environment.
        You can pass field values as parameters into UDFs.



http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
Understand when to use user-defined functions in SQL Server | TechRepublic

           You can nest scalar function calls. This means that you can pass a call to a scalar-valued
           function to another function or stored procedure.
           You can use the results from scalar-valued UDFs as criteria in a WHERE statement. Although
           you can do it, this is typically not a good idea. (Later in the article, I’ll explain why I try to avoid
           this common practice.)

     There are two types of scalar-valued UDFs: deterministic and non-deterministic. Recognizing the
     determinism of the functions that are created is important. An example of the importance is the
     creation of indexed views. One of the many restrictions of creating an index on a view is that the
     view definition cannot use a non-deterministic function.

     Deterministic
     A deterministic UDF always returns the same result with the same set of input parameters. Some
     examples of deterministic functions are the system functions MONTH(), YEAR(), and ISNULL().

     Non-deterministic
     A non-deterministic UDF is can potentially return a different value each time it is called with the
     same set of input parameters. Some examples of non-deterministic functions are the system
     functions GETDATE(), NEWID(), and @@CONNECTIONS.

     Two examples of UDFs
     Before presenting the examples, I will set up my SalesHistory table and load data into it:

     IF OBJECT_ID('SalesHistory')>0
            DROP TABLE SalesHistory;

      CREATE TABLE [dbo].[SalesHistory]
      (
            [SaleID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
            [Product] [varchar](10) NULL,
            [SaleDate] [datetime] NULL,
            [SalePrice] [money] NULL
      )

      DECLARE @i SMALLINT
      SET @i = 1

      WHILE (@i <=1000)
      BEGIN

              INSERT INTO SalesHistory(Product, SaleDate, SalePrice)
              VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i +
     57))

              INSERT INTO SalesHistory(Product, SaleDate, SalePrice)
              VALUES('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i +
     13))

              INSERT INTO SalesHistory(Product, SaleDate, SalePrice)
              VALUES('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i +
     29))

              SET @i = @i + 1
      END

      GO

     The first UDF I will look at is the scalar-valued UDF. The script below defines a function named
     dbo.udf_GetProductSales that accepts three parameters and returns a MONEY value. The
     function uses the three input parameters as criteria in calculating the total sales from the
     SalesHistory table.

     CREATE FUNCTION dbo.udf_GetProductSales
      (
            @Product VARCHAR(10),
            @BeginDate DATETIME,
            @EndDate DATETIME
      )
      RETURNS MONEY
      AS
      BEGIN
            DECLARE @Sales MONEY




http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
Understand when to use user-defined functions in SQL Server | TechRepublic

            SELECT @Sales = SUM(SalePrice)
            FROM SalesHistory
            WHERE
                  Product = @Product AND
      SaleDate BETWEEN @BeginDate AND @EndDate

              RETURN(@Sales)
      END

     The script below calls the UDF created in the above script. Note: The schema the function
     belongs to must be used in the call. In this case, the function belongs to the dbo schema.

     SELECT dbo.udf_GetProductSales('PoolTable', '1/1/1990', '1/1/2000')

     I usually discourage using scalar-valued UDFs in a WHERE criteria statement because, for every
     record considered in the query, the scalar-valued function will be called. This means that a
     function used in the WHERE criteria will cause a scan of the values being searched, which is
     going to be slower than if an index is able to be used. (I will provide more details on this concept
     in a future article.)

     Although the use of a correlated sub-query is sometimes confusing and complicated, the use of
     them can help solve some of the more challenging query problems. While using these special
     queries is useful, they only return one column of data. You can use the upgraded table-valued
     UDFs in SQL Server 2005 to overcome this shortcoming. I’ll show you how to use the APPLY
     operator to accept column values from a table and return a table-result of correlated values.

     CREATE FUNCTION dbo.udf_GetProductSalesTable
      (
            @Product VARCHAR(10),
            @SaleID INT
      )
      RETURNS @SalesTable TABLE
      (
            SalesTotal MONEY,
            SalesCount INT
      )

      BEGIN

              INSERT INTO @SalesTable(SalesTotal, SalesCount)
              SELECT
                    SUM(SalePrice), COUNT(SaleID)
              FROM
                    SalesHistory
              WHERE
                    Product = @Product AND
                    SaleID <= @SaleID

              RETURN
      END
      GO

     The above function accepts the particular product for which we were searching, along with the
     SaleID from the SalesHistory table. From the function definition, you can see that the function
     returns a table named @SalesTable that contains two columns: SalesTotal and SalesCount. The
     body of the function inserts aggregate values into the @SalesTable table variable based upon the
     input parameters.

     The following code uses the APPLY operator to invoke the table-valued function with the values
     from the SalesHistory table. (Note: Logically, you may want to use a JOIN operator here, but it is
     not necessary. The APPLY operator essentially does the “JOIN” for us by applying the values from
     the SalesHistory table to the table-valued function. In a sense, this code works the same way a
     correlated sub-query does, except that it can return multiple correlated values.)

     SELECT * FROM SalesHistory sh
      CROSS APPLY dbo.udf_GetProductSalesTable(sh.Product, sh.SaleID)
      ORDER BY sh.SaleID ASC

     Additional TechRepublic resources on UDFs
        SQL Server 2000’s user-defined functions add flexibility, cut coding time
        Building and using table UDFs in SQL Server
        Incorporate SQL Server UDFs in your .NET applications




http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
Understand when to use user-defined functions in SQL Server | TechRepublic

     Tim Chapman is a SQL Server database administrator who works for a bank in Louisville, KY, and
     has more than 7 years of IT experience. He is also Microsoft certified in SQL Server 2000 and
     SQL Server 2005. If you would like to contact Tim, please e-mail him at chapman.tim@gmail.com.
     —————————————————————————————–

     Get SQL tips in your inbox
     TechRepublic’s free SQL Server newsletter, delivered each Tuesday, contains hands-on tips that
     will help you become more adept with this powerful relational database management system.
     Automatically subscribe today!


     Get IT Tips, news, and reviews delivered directly to your inbox by subscribing to TechRepublic’s free
     newsletters.




                    About Tim Chapman
                        Full Bio     Contact




                   Talking intelligently about                    Defragment your Windows
                   virtualization                                 Server 2003 hard drive on a
                                                                  set schedule




         7            Join the conversation!                                              Add Your Opinion
      Comments        Follow via:



      Staff Picks      Top Rated       Most Recent      My Contacts                              See All Comments




                       UDF or View                                                                     0
                       pixelwiz 15th Jul 2011                                                        Votes


             Can you please give some more details on when it is more appropriate to use a View
             vs a table-valued UDF? I have a few table-valued UDFs created that now I feel
             maybe should have been views, but I... Read Whole Comment +


                 View in thread




                       Scalar UDF in Where Clause                                                      0
                       unclebiguns@... 13th Sep 2007                                                 Votes



             So you are saying that if I use the a Scalar UDF ona variable or parameter in a where
             clause, it will not use an index? For example: Select product_id, product_name from
             products where... Read Whole Comment +


                 View in thread




                       RE: Understand when to use user-defined functions in                            0
                       SQL Server                                                                    Votes

                       alaniane@... 7th Sep 2007

             Thanks for the article on UDFs. I also like to use UDFs when designing queries. It




http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
Understand when to use user-defined functions in SQL Server | TechRepublic

            makes it easier to break complex queries into smaller chunks for debugging
            purposes. Later on, I will replace the... Read Whole Comment +


               View in thread




                                                 See all comments



     Join the TechRepublic Community and join the conversation! Signing-up is
     free and quick, Do it now, we want to hear your opinion.

       Join       Login




http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]

More Related Content

What's hot (20)

PPT
Subqueries -Oracle DataBase
Salman Memon
 
PPT
plsql Les08
sasa_eldoby
 
PPT
Aggregating Data Using Group Functions
Salman Memon
 
ODP
SQL Tunning
Dhananjay Goel
 
PPT
Manipulating Data Oracle Data base
Salman Memon
 
ODP
Oracle SQL Advanced
Dhananjay Goel
 
PPT
Les08 (manipulating data)
Achmad Solichin
 
PDF
mysql 1st. act.
von lozano
 
PPT
plsql Les09
sasa_eldoby
 
PPT
plsql Les07
sasa_eldoby
 
PPT
Database Objects
Salman Memon
 
PPT
plsql Lec11
sasa_eldoby
 
PPTX
Oracle Database View
Eryk Budi Pratama
 
PPT
Writing Basic SQL SELECT Statements
Salman Memon
 
PDF
Ch05
cs19club
 
PDF
Ch04
cs19club
 
DOC
Module 3
cs19club
 
PPT
Restricting and Sorting Data - Oracle Data Base
Salman Memon
 
PPTX
Lab1 select statement
Balqees Al.Mubarak
 
PPTX
Oraclesql
Priya Goyal
 
Subqueries -Oracle DataBase
Salman Memon
 
plsql Les08
sasa_eldoby
 
Aggregating Data Using Group Functions
Salman Memon
 
SQL Tunning
Dhananjay Goel
 
Manipulating Data Oracle Data base
Salman Memon
 
Oracle SQL Advanced
Dhananjay Goel
 
Les08 (manipulating data)
Achmad Solichin
 
mysql 1st. act.
von lozano
 
plsql Les09
sasa_eldoby
 
plsql Les07
sasa_eldoby
 
Database Objects
Salman Memon
 
plsql Lec11
sasa_eldoby
 
Oracle Database View
Eryk Budi Pratama
 
Writing Basic SQL SELECT Statements
Salman Memon
 
Ch05
cs19club
 
Ch04
cs19club
 
Module 3
cs19club
 
Restricting and Sorting Data - Oracle Data Base
Salman Memon
 
Lab1 select statement
Balqees Al.Mubarak
 
Oraclesql
Priya Goyal
 

Similar to Understand when to use user defined functions in sql server tech-republic (20)

PDF
Sql Commands
Sachin MK
 
PPTX
Udf&views in sql...by thanveer melayi
Muhammed Thanveer M
 
PPTX
Mysql creating stored function
Prof.Nilesh Magar
 
PPT
Intro to tsql unit 10
Syed Asrarali
 
DOCX
My Sql concepts
Pragya Rastogi
 
PPTX
Chapter 4 functions, views, indexing
baabtra.com - No. 1 supplier of quality freshers
 
DOCX
Function
Durgaprasad Yadav
 
PDF
advance-sqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal.pdf
traphuong2103
 
DOCX
Excel formula
Naraindas Parhyar
 
PPS
03 qmds2005 session03
Niit Care
 
PPTX
Lab Session for sql programming language 1.pptx
meharikiros2
 
PPT
Greg Lewis SQL Portfolio
gregmlewis
 
DOCX
Database testing
Pesara Swamy
 
PPTX
User defined Function in SQL
baabtra.com - No. 1 supplier of quality freshers
 
DOC
Sql functions
G C Reddy Technologies
 
PPTX
function Creation in Mysql
baabtra.com - No. 1 supplier of quality freshers
 
PPTX
Implementing Tables and Views.pptx
LuisManuelUrbinaAmad
 
PPS
09 qmds2005 session13
Niit Care
 
PDF
Sql wksht-3
Mukesh Tekwani
 
PPTX
SQL Server Select Topics
Jay Coskey
 
Sql Commands
Sachin MK
 
Udf&views in sql...by thanveer melayi
Muhammed Thanveer M
 
Mysql creating stored function
Prof.Nilesh Magar
 
Intro to tsql unit 10
Syed Asrarali
 
My Sql concepts
Pragya Rastogi
 
Chapter 4 functions, views, indexing
baabtra.com - No. 1 supplier of quality freshers
 
advance-sqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaal.pdf
traphuong2103
 
Excel formula
Naraindas Parhyar
 
03 qmds2005 session03
Niit Care
 
Lab Session for sql programming language 1.pptx
meharikiros2
 
Greg Lewis SQL Portfolio
gregmlewis
 
Database testing
Pesara Swamy
 
Sql functions
G C Reddy Technologies
 
Implementing Tables and Views.pptx
LuisManuelUrbinaAmad
 
09 qmds2005 session13
Niit Care
 
Sql wksht-3
Mukesh Tekwani
 
SQL Server Select Topics
Jay Coskey
 
Ad

More from Kaing Menglieng (20)

PDF
What is your sql server backup strategy tech_republic
Kaing Menglieng
 
PDF
Using sql server 2008's merge statement tech republic
Kaing Menglieng
 
PDF
Using grouping sets in sql server 2008 tech republic
Kaing Menglieng
 
PDF
Sql server indexed views speed up your select queries part 1 - code-projec
Kaing Menglieng
 
PDF
Sql server – query optimization – remove bookmark lookup – remove rid lookup
Kaing Menglieng
 
PDF
Sql server common interview questions and answers
Kaing Menglieng
 
PDF
Sql server common interview questions and answers page 6
Kaing Menglieng
 
PDF
Sql server common interview questions and answers page 5
Kaing Menglieng
 
PDF
Sql server common interview questions and answers page 4
Kaing Menglieng
 
PDF
Sql server common interview questions and answers page 2
Kaing Menglieng
 
PDF
Sql server – 2008 – hardware and software requirements for installing sql se
Kaing Menglieng
 
PDF
Speeding up queries with semi joins and anti-joins
Kaing Menglieng
 
PDF
Speed up sql
Kaing Menglieng
 
PDF
Speed up sql server apps - visual studio magazine
Kaing Menglieng
 
PDF
See sql server graphical execution plans in action tech republic
Kaing Menglieng
 
PDF
Reviewing sql server permissions tech republic
Kaing Menglieng
 
PDF
Query optimization how to search millions of record in sql table faster -
Kaing Menglieng
 
PDF
Optimize sql server queries with these advanced tuning techniques tech repu
Kaing Menglieng
 
PDF
New date datatypes in sql server 2008 tech republic
Kaing Menglieng
 
PDF
Introduction to policy based management in sql server 2008 tech-republic
Kaing Menglieng
 
What is your sql server backup strategy tech_republic
Kaing Menglieng
 
Using sql server 2008's merge statement tech republic
Kaing Menglieng
 
Using grouping sets in sql server 2008 tech republic
Kaing Menglieng
 
Sql server indexed views speed up your select queries part 1 - code-projec
Kaing Menglieng
 
Sql server – query optimization – remove bookmark lookup – remove rid lookup
Kaing Menglieng
 
Sql server common interview questions and answers
Kaing Menglieng
 
Sql server common interview questions and answers page 6
Kaing Menglieng
 
Sql server common interview questions and answers page 5
Kaing Menglieng
 
Sql server common interview questions and answers page 4
Kaing Menglieng
 
Sql server common interview questions and answers page 2
Kaing Menglieng
 
Sql server – 2008 – hardware and software requirements for installing sql se
Kaing Menglieng
 
Speeding up queries with semi joins and anti-joins
Kaing Menglieng
 
Speed up sql
Kaing Menglieng
 
Speed up sql server apps - visual studio magazine
Kaing Menglieng
 
See sql server graphical execution plans in action tech republic
Kaing Menglieng
 
Reviewing sql server permissions tech republic
Kaing Menglieng
 
Query optimization how to search millions of record in sql table faster -
Kaing Menglieng
 
Optimize sql server queries with these advanced tuning techniques tech repu
Kaing Menglieng
 
New date datatypes in sql server 2008 tech republic
Kaing Menglieng
 
Introduction to policy based management in sql server 2008 tech-republic
Kaing Menglieng
 
Ad

Understand when to use user defined functions in sql server tech-republic

  • 1. Understand when to use user-defined functions in SQL Server | TechRepublic ZDNet Asia SmartPlanet TechRepublic Log In Join TechRepublic FAQ Go Pro! Blogs Downloads Newsletters Galleries Q&A Discussions News Research Library IT Management Development IT Support Data Center Networks Security Home / Blogs / The Enterprise Cloud Follow this blog: The Enterprise Cloud Understand when to use user- defined functions in SQL Server By Tim Chapman September 3, 2007, 11:49 PM PDT In the simplest terms, a user-defined function (UDF) in SQL Server is a programming construct that accepts parameters, does work that typically makes use of the accepted parameters, and returns a type of result. This article will cover two types of UDFs: table-valued and scalar-valued. (I will not be covering aggregate functions.) Types of UDFs Table-valued functions A table-valued UDF is a function that accepts parameters and returns the results in the form of a table. This type of function is special because it returns a table that you can query the results of and join with other tables. In SQL Server 2005, field values from other tables may be passed into the function during a join operation to return a record based result. To accomplish this, you must use SQL Server 2005’s APPLY operator. It can be difficult to know when it is appropriate to use a VIEW vs. when it is appropriate to use a table-valued UDF. VIEWs are a great tool for data abstraction, combining data, and logically using subsets of data. I like to use table-valued UDFs when I need to use one or more values from different tables in a join operation where some type of calculation needs to be done and an aggregation returned. Scalar-valued functions A scalar-valued UDF accepts parameters and, ultimately, returns a single, atomic value. There are seven reasons why these types of functions are different than stored procedures in the database engine. You cannot modify data inside of a UDF. A scalar-valued UDF returns only one value, where a stored procedure can have numerous OUTPUT parameters. You can use scalar-valued UDFs as the default value for a column in a table. Scalar-valued UDFs are an easy way to define constant values to use in your database environment. You can pass field values as parameters into UDFs. http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
  • 2. Understand when to use user-defined functions in SQL Server | TechRepublic You can nest scalar function calls. This means that you can pass a call to a scalar-valued function to another function or stored procedure. You can use the results from scalar-valued UDFs as criteria in a WHERE statement. Although you can do it, this is typically not a good idea. (Later in the article, I’ll explain why I try to avoid this common practice.) There are two types of scalar-valued UDFs: deterministic and non-deterministic. Recognizing the determinism of the functions that are created is important. An example of the importance is the creation of indexed views. One of the many restrictions of creating an index on a view is that the view definition cannot use a non-deterministic function. Deterministic A deterministic UDF always returns the same result with the same set of input parameters. Some examples of deterministic functions are the system functions MONTH(), YEAR(), and ISNULL(). Non-deterministic A non-deterministic UDF is can potentially return a different value each time it is called with the same set of input parameters. Some examples of non-deterministic functions are the system functions GETDATE(), NEWID(), and @@CONNECTIONS. Two examples of UDFs Before presenting the examples, I will set up my SalesHistory table and load data into it: IF OBJECT_ID('SalesHistory')>0 DROP TABLE SalesHistory; CREATE TABLE [dbo].[SalesHistory] ( [SaleID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Product] [varchar](10) NULL, [SaleDate] [datetime] NULL, [SalePrice] [money] NULL ) DECLARE @i SMALLINT SET @i = 1 WHILE (@i <=1000) BEGIN INSERT INTO SalesHistory(Product, SaleDate, SalePrice) VALUES ('Computer', DATEADD(mm, @i, '3/11/1919'), DATEPART(ms, GETDATE()) + (@i + 57)) INSERT INTO SalesHistory(Product, SaleDate, SalePrice) VALUES('BigScreen', DATEADD(mm, @i, '3/11/1927'), DATEPART(ms, GETDATE()) + (@i + 13)) INSERT INTO SalesHistory(Product, SaleDate, SalePrice) VALUES('PoolTable', DATEADD(mm, @i, '3/11/1908'), DATEPART(ms, GETDATE()) + (@i + 29)) SET @i = @i + 1 END GO The first UDF I will look at is the scalar-valued UDF. The script below defines a function named dbo.udf_GetProductSales that accepts three parameters and returns a MONEY value. The function uses the three input parameters as criteria in calculating the total sales from the SalesHistory table. CREATE FUNCTION dbo.udf_GetProductSales ( @Product VARCHAR(10), @BeginDate DATETIME, @EndDate DATETIME ) RETURNS MONEY AS BEGIN DECLARE @Sales MONEY http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
  • 3. Understand when to use user-defined functions in SQL Server | TechRepublic SELECT @Sales = SUM(SalePrice) FROM SalesHistory WHERE Product = @Product AND SaleDate BETWEEN @BeginDate AND @EndDate RETURN(@Sales) END The script below calls the UDF created in the above script. Note: The schema the function belongs to must be used in the call. In this case, the function belongs to the dbo schema. SELECT dbo.udf_GetProductSales('PoolTable', '1/1/1990', '1/1/2000') I usually discourage using scalar-valued UDFs in a WHERE criteria statement because, for every record considered in the query, the scalar-valued function will be called. This means that a function used in the WHERE criteria will cause a scan of the values being searched, which is going to be slower than if an index is able to be used. (I will provide more details on this concept in a future article.) Although the use of a correlated sub-query is sometimes confusing and complicated, the use of them can help solve some of the more challenging query problems. While using these special queries is useful, they only return one column of data. You can use the upgraded table-valued UDFs in SQL Server 2005 to overcome this shortcoming. I’ll show you how to use the APPLY operator to accept column values from a table and return a table-result of correlated values. CREATE FUNCTION dbo.udf_GetProductSalesTable ( @Product VARCHAR(10), @SaleID INT ) RETURNS @SalesTable TABLE ( SalesTotal MONEY, SalesCount INT ) BEGIN INSERT INTO @SalesTable(SalesTotal, SalesCount) SELECT SUM(SalePrice), COUNT(SaleID) FROM SalesHistory WHERE Product = @Product AND SaleID <= @SaleID RETURN END GO The above function accepts the particular product for which we were searching, along with the SaleID from the SalesHistory table. From the function definition, you can see that the function returns a table named @SalesTable that contains two columns: SalesTotal and SalesCount. The body of the function inserts aggregate values into the @SalesTable table variable based upon the input parameters. The following code uses the APPLY operator to invoke the table-valued function with the values from the SalesHistory table. (Note: Logically, you may want to use a JOIN operator here, but it is not necessary. The APPLY operator essentially does the “JOIN” for us by applying the values from the SalesHistory table to the table-valued function. In a sense, this code works the same way a correlated sub-query does, except that it can return multiple correlated values.) SELECT * FROM SalesHistory sh CROSS APPLY dbo.udf_GetProductSalesTable(sh.Product, sh.SaleID) ORDER BY sh.SaleID ASC Additional TechRepublic resources on UDFs SQL Server 2000’s user-defined functions add flexibility, cut coding time Building and using table UDFs in SQL Server Incorporate SQL Server UDFs in your .NET applications http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
  • 4. Understand when to use user-defined functions in SQL Server | TechRepublic Tim Chapman is a SQL Server database administrator who works for a bank in Louisville, KY, and has more than 7 years of IT experience. He is also Microsoft certified in SQL Server 2000 and SQL Server 2005. If you would like to contact Tim, please e-mail him at [email protected]. —————————————————————————————– Get SQL tips in your inbox TechRepublic’s free SQL Server newsletter, delivered each Tuesday, contains hands-on tips that will help you become more adept with this powerful relational database management system. Automatically subscribe today! Get IT Tips, news, and reviews delivered directly to your inbox by subscribing to TechRepublic’s free newsletters. About Tim Chapman Full Bio Contact Talking intelligently about Defragment your Windows virtualization Server 2003 hard drive on a set schedule 7 Join the conversation! Add Your Opinion Comments Follow via: Staff Picks Top Rated Most Recent My Contacts See All Comments UDF or View 0 pixelwiz 15th Jul 2011 Votes Can you please give some more details on when it is more appropriate to use a View vs a table-valued UDF? I have a few table-valued UDFs created that now I feel maybe should have been views, but I... Read Whole Comment + View in thread Scalar UDF in Where Clause 0 unclebiguns@... 13th Sep 2007 Votes So you are saying that if I use the a Scalar UDF ona variable or parameter in a where clause, it will not use an index? For example: Select product_id, product_name from products where... Read Whole Comment + View in thread RE: Understand when to use user-defined functions in 0 SQL Server Votes alaniane@... 7th Sep 2007 Thanks for the article on UDFs. I also like to use UDFs when designing queries. It http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]
  • 5. Understand when to use user-defined functions in SQL Server | TechRepublic makes it easier to break complex queries into smaller chunks for debugging purposes. Later on, I will replace the... Read Whole Comment + View in thread See all comments Join the TechRepublic Community and join the conversation! Signing-up is free and quick, Do it now, we want to hear your opinion. Join Login http://www.techrepublic.com/blog/datacenter/understand-when-to-use-user-defined-functions-in-sql-server/171[08/29/2012 3:08:18 PM]