ฉันทำการทดสอบด้วยบิตตรรกะที่ใช้งานได้ยาวนานโดยมีรหัสบิตเดียวกัน (คำสั่ง SELECT แบบยาว) ที่ทำงานทั้งใน Table Valued Function และ Stored Procedure และการดำเนินการแบบตรง / SELECT และแต่ละรายการดำเนินการเหมือนกัน
ในความคิดของฉันมักจะใช้ฟังก์ชัน Table Valued แทนที่จะใช้ขั้นตอนที่เก็บไว้เพื่อส่งคืนชุดผลลัพธ์เนื่องจากทำให้ตรรกะง่ายขึ้นและอ่านได้ในแบบสอบถามที่เข้าร่วมในภายหลังและช่วยให้คุณสามารถใช้ตรรกะเดียวกันนี้ซ้ำได้ เพื่อหลีกเลี่ยงการตีประสิทธิภาพมากเกินไปฉันมักจะใช้พารามิเตอร์ "ทางเลือก" (กล่าวคือคุณสามารถส่งค่า NULL ไปให้) เพื่อเปิดใช้งานฟังก์ชันเพื่อส่งคืนผลลัพธ์ที่ตั้งไว้ให้เร็วขึ้นเช่น:
CREATE FUNCTION dbo.getSitePermissions(@RegionID int, @optPersonID int, optSiteID int)
AS
RETURN
SELECT DISTINCT SiteID, PersonID
FROM dbo.SiteViewPermissions
WHERE (@optPersonID IS NULL OR @optPersonID = PersonID)
AND (@optSiteID IS NULL OR @optSiteID = SiteID)
AND @RegionID = RegionID
ด้วยวิธีนี้คุณสามารถใช้ฟังก์ชันนี้กับสถานการณ์ต่างๆได้มากมายและไม่ต้องใช้ประสิทธิภาพสูง ฉันเชื่อว่าสิ่งนี้มีประสิทธิภาพมากกว่าการกรองในภายหลัง:
SELECT * FROM dbo.getSitePermissions(@RegionID) WHERE SiteID = 1
ฉันใช้เทคนิคนี้ในหลายฟังก์ชันบางครั้งมีรายการพารามิเตอร์ "ทางเลือก" ประเภทนี้เป็นจำนวนมาก