"

بررسی نحوه ایجاد توابعی با خروجی جدول محور در SQL Server,مزایای استفاده از توابع جدول‌محور در SQL Server,بهینه‌سازی توابع جدول‌محور در SQL Server

بررسی نحوه ایجاد توابعی با خروجی جدول محور در SQL Server

آموزش ایجاد توابع جدول‌محور در SQL Server برای بازگرداندن داده‌ها به‌صورت جدول و استفاده در کوئری‌های مختلف می باشد.

تیم تحریریه
4
0
01 تیر 1405
لینک کوتاه

بررسی نحوه ایجاد توابعی با خروجی جدول‌محور در SQL Server

در پایگاه داده SQL Server، توابع (Functions) یکی از ابزارهای قدرتمند برای سازمان‌دهی منطق برنامه، افزایش قابلیت استفاده مجدد از کدها و بهبود خوانایی پرس‌وجوها هستند.
در میان انواع مختلف توابع، توابع جدول‌محور یا Table-Valued Functions (TVF) اهمیت ویژه‌ای دارند؛ زیرا می‌توانند مجموعه‌ای از رکوردها را همانند یک جدول بازگردانند.
این ویژگی باعث می‌شود بتوان از آن‌ها در دستورات SELECT، JOIN، APPLY و سایر عملیات پایگاه داده استفاده کرد.

توابع جدول‌محور راهکاری مناسب برای پیاده‌سازی منطق‌های پیچیده‌ای هستند که نیاز به بازگرداندن چندین ردیف داده دارند.
به جای تکرار کوئری‌های مشابه در بخش‌های مختلف سیستم، می‌توان منطق موردنظر را در قالب یک تابع جدول‌محور تعریف کرد و در هر زمان از آن بهره برد.


بررسی نحوه ایجاد توابعی با خروجی جدول‌محور در SQL Server


تابع جدول‌محور چیست؟

تابع جدول‌محور نوعی تابع در SQL Server است که خروجی آن یک جدول است. برخلاف توابع اسکالر (Scalar Functions) که تنها یک مقدار را بازمی‌گردانند، این توابع می‌توانند چندین سطر و ستون را به عنوان خروجی ارائه دهند.

به طور کلی دو نوع تابع جدول‌محور در SQL Server وجود دارد:

  • Inline Table-Valued Function

  • Multi-Statement Table-Valued Function

هر یک از این توابع ویژگی‌ها و کاربردهای خاص خود را دارند.

 

مزایای استفاده از توابع جدول‌محور در SQL Server

استفاده از TVF مزایای متعددی دارد که از جمله مهم‌ترین آن‌ها می‌توان به موارد زیر اشاره کرد:

  • استفاده مجدد از کد

    به جای نوشتن مکرر کوئری‌های پیچیده، می‌توان یک تابع ایجاد کرد و در نقاط مختلف پروژه از آن استفاده نمود.
  • افزایش خوانایی

    کوئری‌های طولانی و پیچیده می‌توانند در قالب توابع دسته‌بندی شوند تا ساختار برنامه مرتب‌تر شود.
  • نگهداری آسان‌تر

    در صورت تغییر منطق کسب‌وکار، تنها کافی است تابع اصلاح شود و نیازی به تغییر تمام کوئری‌ها نخواهد بود.
  • افزایش انعطاف‌پذیری

    توابع جدول‌محور می‌توانند پارامتر دریافت کرده و خروجی‌های مختلفی تولید کنند.



مزایای استفاده از توابع جدول‌محور در SQL Server

Inline Table-Valued Function

این نوع تابع ساده‌ترین و سریع‌ترین نوع TVF محسوب می‌شود.

در این مدل، خروجی تابع مستقیماً از یک دستور SELECT تشکیل می‌شود و نیازی به تعریف متغیر جدول وجود ندارد.

ساختار کلی
CREATE FUNCTION dbo.GetProducts()

RETURNS TABLE

AS

RETURN

(

SELECT *

FROM Products

)

در مثال فوق، تابع تمام رکوردهای جدول Products را بازمی‌گرداند.

 

اجرای تابع

برای مشاهده خروجی تابع می‌توان از دستور زیر استفاده کرد:

 

SELECT *

FROM dbo.GetProducts()

 

خروجی دقیقاً مشابه اجرای یک SELECT معمولی خواهد بود.

 

ایجاد تابع با پارامتر

یکی از مهم‌ترین مزایای TVF امکان دریافت پارامتر است.

مثال:

 

CREATE FUNCTION dbo.GetProductsByCategory

(

@CategoryID INT

)

RETURNS TABLE

AS

RETURN

(

SELECT ProductID,

ProductName,

UnitPrice

FROM Products

WHERE CategoryID = @CategoryID

)

 

استفاده:

 

SELECT *

FROM dbo.GetProductsByCategory(2)

 

در این مثال تنها محصولات متعلق به دسته‌بندی شماره 2 بازگردانده می‌شوند.

 

استفاده در JOIN

 

توابع جدول‌محور را می‌توان مانند یک جدول واقعی در عملیات JOIN استفاده کرد.

 

نمونه:

 

SELECT

C.CategoryName,

P.ProductName

FROM Categories C

INNER JOIN dbo.GetProductsByCategory(1) P

ON C.CategoryID = 1

 

این قابلیت انعطاف بالایی در طراحی کوئری‌ها ایجاد می‌کند.

 

Multi-Statement Table-Valued Function

گاهی اوقات یک SELECT ساده پاسخگوی نیاز ما نیست و لازم است چندین عملیات روی داده‌ها انجام شود.

در این شرایط از Multi-Statement TVF استفاده می‌کنیم.

  • ساختار کلی

CREATE FUNCTION dbo.GetEmployeeList()

RETURNS @Employees TABLE

(

EmployeeID INT,

FullName NVARCHAR(200),

Salary MONEY

)

AS

BEGIN




INSERT INTO @Employees

SELECT

EmployeeID,

FirstName + ' ' + LastName,

Salary

FROM Employees




RETURN

END

در این مدل ابتدا یک جدول خروجی تعریف می‌شود و سپس داده‌ها در آن درج می‌گردند.

 

  • فراخوانی تابع

SELECT *

FROM dbo.GetEmployeeList()



تابع چند دستوری با پارامتر

نمونه:

CREATE FUNCTION dbo.GetOrdersByCustomer

(

@CustomerID INT

)

RETURNS @Result TABLE

(

OrderID INT,

OrderDate DATETIME,

TotalAmount MONEY

)

AS

BEGIN




INSERT INTO @Result

SELECT

OrderID,

OrderDate,

TotalAmount

FROM Orders

WHERE CustomerID = @CustomerID




RETURN

END

 

فراخوانی:

 

SELECT *

FROM dbo.GetOrdersByCustomer(10)



تفاوت Inline و Multi-Statement

ویژگی  Multi-Statement TVF  Inline TVF
سرعت   بسیار بالا  پایین‌تر
ساختار ساده  پیچیده‌تر
قابلیت پردازش محدود بیشتر
مصرف منابع  کمتر بیشتر
بهینه‌سازی  بهتر  ضعیف‌تر

 

در اکثر پروژه‌ها، اگر امکان استفاده از Inline TVF وجود داشته باشد، انتخاب مناسب‌تری خواهد بود.



 


🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟

با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!

این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.

با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.

پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

 همین حالا شروع کنید و به دنیای داده‌ها بپیوندید!






استفاده از APPLY

یکی از کاربردهای جذاب توابع جدول‌محور، استفاده همراه با CROSS APPLY و OUTER APPLY است.

مثال:

SELECT

C.CustomerID,

O.OrderID

FROM Customers C

CROSS APPLY dbo.GetOrdersByCustomer(C.CustomerID) O

در این مثال تابع برای هر مشتری اجرا شده و سفارش‌های مرتبط را نمایش می‌دهد.

 

استفاده در گزارش‌گیری

توابع جدول‌محور برای تهیه گزارش‌های مدیریتی بسیار مفید هستند.

مثال:

CREATE FUNCTION dbo.GetMonthlySales

(

@Year INT,

@Month INT

)

RETURNS TABLE

AS

RETURN

(

SELECT

OrderID,

CustomerID,

TotalAmount

FROM Orders

WHERE YEAR(OrderDate)=@Year

AND MONTH(OrderDate)=@Month

)

استفاده:

SELECT *

FROM dbo.GetMonthlySales(2025,5)

ترکیب چند جدول در خروجی تابع

 

مثال:

 

CREATE FUNCTION dbo.GetOrderDetails

(

@OrderID INT

)

RETURNS TABLE

AS

RETURN

(

SELECT

O.OrderID,

C.CustomerName,

P.ProductName,

OD.Quantity

FROM Orders O

INNER JOIN Customers C

ON O.CustomerID=C.CustomerID

INNER JOIN OrderDetails OD

ON O.OrderID=OD.OrderID

INNER JOIN Products P

ON OD.ProductID=P.ProductID

WHERE O.OrderID=@OrderID

)

این تابع اطلاعات کاملی از سفارش را بازمی‌گرداند.

 

بهینه‌سازی توابع جدول‌محور در SQL Server

برای دستیابی به بهترین عملکرد باید چند نکته مهم را رعایت کرد.

  • استفاده از Inline TVF

    تا حد امکان از Inline TVF استفاده کنید زیرا بهینه‌ساز SQL Server می‌تواند آن را درون کوئری اصلی ادغام کند.
  • کاهش تعداد ستون‌ها

    تنها ستون‌های موردنیاز را بازگردانید.
    • نامناسب:
SELECT *
    • مناسب:

 

SELECT ProductID,

ProductName
  • ایجاد ایندکس مناسب

    اگر تابع روی جدول‌های بزرگ اجرا می‌شود، وجود ایندکس مناسب اهمیت زیادی دارد.
    نمونه:

 

CREATE INDEX IX_Products_CategoryID

ON Products(CategoryID)
  • اجتناب از منطق پیچیده

    توابعی که شامل پردازش‌های سنگین هستند ممکن است باعث افت عملکرد شوند.

 

بهینه‌سازی توابع جدول‌محور در SQL Server

مشاهده توابع موجود  در SQL Server

برای مشاهده فهرست توابع موجود می‌توان از دستور زیر استفاده کرد:

 

SELECT *

FROM sys.objects

WHERE type IN ('TF','IF')

 

کدهای فوق:

 

TF = Multi Statement TVF

IF = Inline TVF

حذف تابع  در SQL Server

برای حذف یک تابع:

DROP FUNCTION dbo.GetProducts

ویرایش تابع  در SQL Server

برای تغییر تابع:

ALTER FUNCTION dbo.GetProducts

RETURNS TABLE

AS

RETURN

(

SELECT ProductID,

ProductName

FROM Products

)

کاربردهای عملی توابع جدول‌محور در SQL Server

این توابع در پروژه‌های واقعی کاربردهای فراوانی دارند:

  • سیستم فروشگاهی

    • نمایش محصولات هر دسته
    • گزارش سفارش‌ها
    • محاسبه فروش ماهانه
  • سیستم منابع انسانی

    • فهرست کارمندان فعال
    • گزارش حقوق و مزایا
    • سوابق حضور و غیاب
    • سیستم مالی
    • گزارش تراکنش‌ها
    • مانده حساب مشتریان
    • گزارش گردش مالی
  • سامانه‌های مدیریتی

    • داشبوردهای مدیریتی
    • گزارش‌های آماری
    • تحلیل داده‌ها


نکات امنیتی 
 توابع جدول‌محور در SQL Server

در طراحی توابع جدول‌محور بهتر است:

  • دسترسی کاربران محدود شود.
  • از اعتبارسنجی پارامترها استفاده گردد.
  • اطلاعات حساس بدون نیاز بازگردانده نشوند.
  • سطح دسترسی مناسب برای کاربران تعریف شود.

جمع‌بندی

توابع جدول‌محور (Table-Valued Functions) یکی از قابلیت‌های بسیار کاربردی SQL Server هستند که امکان بازگرداندن مجموعه‌ای از داده‌ها را در قالب یک جدول فراهم می‌کنند.
این توابع به دو دسته Inline و Multi-Statement تقسیم می‌شوند و هر کدام کاربردهای خاص خود را دارند.
استفاده صحیح از TVF باعث افزایش خوانایی کد، کاهش تکرار، ساده‌سازی نگهداری سیستم و بهبود ساختار پایگاه داده می‌شود.
در بسیاری از پروژه‌های حرفه‌ای، توابع جدول‌محور به عنوان ابزاری قدرتمند برای گزارش‌گیری، پردازش داده‌ها و پیاده‌سازی منطق کسب‌وکار مورد استفاده قرار می‌گیرند و نقش مهمی در توسعه سیستم‌های مقیاس‌پذیر و قابل نگهداری دارند.

محصولات مرتبط

کاربران ما

شما هم نظرتون با ما دریاره “بررسی نحوه ایجاد توابعی با خروجی جدول محور در SQL Server” اشتراک بزارید

برای ارسال نظر لطفا ورود یا ثبت نام کنید

منو