| ข้อจำกัดของ User Defined Functions ( UDF ) | ข้อจำกัดของ User Defined Functions ( UDF ) |
|---|---|
| ประเภทของ User Defined Functions | ประเภทของ User Defined Functions |
| Scalar Functions | Scalar Functions |
| Inline Table-valued Functions | Inline Table-valued Functions |
| Multi-statement Table-value Functions | Multi-statement Table-value Functions |
| DROP FUNCTION | ลบ User Defined Function |
subject:ข้อจำกัดของ User Defined Functions ( UDF )
content:ข้อจำกัดของ User Defined Functions ( UDF ) 1) ส่งค่ากลับได้ทุกประเภท ยกเว้น text, ntext, image, cursor, user_defined, timestamp 2) มี parameter ได้ไม่เกิน 1024 ตัว 4) ภายใน User Defined Functions สามารถเรียกใช้ User Defuned Functions อื่นๆ ได้ด้วย 3) ภายใน User Defined Functions สามารถเรียกใช้ User Defuned Functions ตัวเองได้ไม่เกิน 32 ระดับ ( Recursion ) 4) ใช้คำสั่ง EXEC ภายใน User Defined Functions ไม่ได้ 5) คำต่อไปนี้ใช้ไม่ได้ใน User Defined Functions ได้แก่ @@CONNECTIONS, @@POCK_SENT, @@CPU_BUSY, @@PACKET_ERRORS, @@IDLE, @@TIMETICKS, @@IO_BUSY, @@TOTAL_ERRORS, @@MAX_CONNECTIONS, @@TOTAL_READ, @@PACK_RECEIVER, @@TOTAL_WRITE, GETDATE, GETUTCDATE, NEWID, RAND, TEXTPTR
subject:ประเภทของ User Defined Functions
content:User Defined Functions มี 3 ประเภท ได้แก่ 1) Scalar Functions 2) Inline Table-valued Functions 3) Multi-statement Table-value Functions
subject:Scalar Functions
syntax:CREATE FUNCTION [owner_name.]function_name ( @parameter [ AS ] data_type [ = default_value ] ) RETURNS data_type [ WITH { ENCRYPTION | SCHEMABINDING } ] [ AS ] BEGIN <statement> RETURN scalar_expression END
content:เป็นการสร้าง function เพื่อใช้ประโยชน์ต่างๆ
example:--------- ex1 CREATE FUNCTION udf_dateOnly ( @mydate smalldatetime ) RETURNS varchar(20) AS BEGIN RETURN CONVERT(varchar(20), DATEPART(mm, @mydate)) + "/" + CONVERT(varchar(20), DATEPART(dd, @mydate)) + "/" + CONVERT(varchar(20), DATEPART(yyyy, @mydate)) END GO SELECT id, udf_dateOnly(date_born) FROM person --------- ex2 CREATE FUNCTION udf_squareArea ( @width decimal(4,1), @height decimal(4,1) ) RETURNS decimal(8,2) AS BEGIN DECLARE @sum decimal(8,2) SET @sum = @width * @height RETURN @sum END CREATE TABLE Square ( id int PRIMARY KEY, width decimal(4,1), height decimal(4,1), area AS ( udf_squareArea(width, height) ) ) --------- ex3 CREATE FUNCTION udf_totalQtyAvg() RETURNS int AS BEGIN RETURN ( SELECT AVG(quantity) FROM orders ) END SELECT id, ( SELECT AVG(quantity) FROM orders ) FROM orders SELECT id, udf_totalQtyAvg() FROM orders
subject:Inline Table-valued Functions
syntax:CREATE FUNCTION [owner_name.]function_name ( @parameter [ AS ] data_type [ =default ] ) RETURNS TABLE [ WITH { ENCRYPTION | SCHEMABINDING } ] [ AS ] RETURN [ ( ] <select_statement> [ ) ]
content:เป็นการสร้าง function ที่จะ คืนค่าออกมาเป็น table
example:CREATE FUNCTION udf_productByTypeOf ( @typeId int ) RETURNS TABLE AS RETURN ( SELECT id, name, price FROM product WHERE type_id = @typeId ) DO
subject:Multi-statement Table-value Functions
syntax:CREATE FUNCTION [owner_name.]function_name ( @parameter [ AS ] data_type [ =default ] ) RETURNS @return_value TABLE < table_type_definition > [ WITH { ENCRYPTION | SCHEMABINDING } ] [ AS ] BEGIN <statement> RETURN END
content:เป็นการสร้างตารางเสมือนขึ้นมา ที่จะกำหนดตรง < table_type_definition > เพื่อที่จะถูกดำเนินการบางอย่าง แล้วคืนค่า table นั้นกลับไป
example:CREATE FUNCTION udf_ordersVat ( @vat int ) RETURNS @ordersVat TABLE ( id int, item_name varchar(100), price_vat money ) AS BEGIN INSERT INTO @ordersVat SELECT a.id, b.name, ( ( b.price * ( 100 + @vat ) ) / 100 ) AS price_vat FROM orders a INNER JOIN product b ON a.item_id = b.id RETURN END SELECT * FROM udf_ordersVat ( 7 )
subject:DROP FUNCTION
syntax:DROP FUNCTION function_name
content:ใช้ลบ function ที่กำหนด
example:CREATE FUNCTION udf_ordersVat ( @vat int ) RETURNS @ordersVat TABLE ( id int, item_name varchar(100), price_vat money ) AS BEGIN INSERT INTO @ordersVat SELECT a.id, b.name, ( ( b.price * ( 100 + @vat ) ) / 100 ) AS price_vat FROM orders a INNER JOIN product b ON a.item_id = b.id RETURN END DROP FUNCTION udf_ordersVat