วิธีหนึ่งที่คุณอาจต้องการพิจารณาว่าคุณจะต้องทำงานกับค่ามากหรือไม่นั้นคือการเขียนลงในตารางชั่วคราวก่อน จากนั้นคุณก็เข้าร่วมมันเหมือนปกติ
ด้วยวิธีนี้คุณจะแยกวิเคราะห์ได้เพียงครั้งเดียว
มันง่ายที่สุดในการใช้หนึ่งใน 'แยก' UDFs แต่ผู้คนมากมายได้โพสต์ตัวอย่างของพวกนั้นฉันคิดว่าฉันจะไปเส้นทางอื่น;)
ตัวอย่างนี้จะสร้างตารางชั่วคราวเพื่อให้คุณเข้าร่วมใน (#tmpDept) และกรอกข้อมูลด้วยรหัสแผนกที่คุณส่งผ่านฉันคิดว่าคุณกำลังแยกพวกเขาด้วยเครื่องหมายจุลภาค แต่แน่นอนคุณสามารถเปลี่ยนได้ ทุกสิ่งที่คุณต้องการ
IF OBJECT_ID('tempdb..#tmpDept', 'U') IS NOT NULL
BEGIN
DROP TABLE #tmpDept
END
SET @DepartmentIDs=REPLACE(@DepartmentIDs,' ','')
CREATE TABLE #tmpDept (DeptID INT)
DECLARE @DeptID INT
IF IsNumeric(@DepartmentIDs)=1
BEGIN
SET @DeptID=@DepartmentIDs
INSERT INTO #tmpDept (DeptID) SELECT @DeptID
END
ELSE
BEGIN
WHILE CHARINDEX(',',@DepartmentIDs)>0
BEGIN
SET @DeptID=LEFT(@DepartmentIDs,CHARINDEX(',',@DepartmentIDs)-1)
SET @DepartmentIDs=RIGHT(@DepartmentIDs,LEN(@DepartmentIDs)-CHARINDEX(',',@DepartmentIDs))
INSERT INTO #tmpDept (DeptID) SELECT @DeptID
END
END
วิธีนี้จะช่วยให้คุณสามารถส่งรหัสแผนกเดียวได้หลาย ID พร้อมด้วยเครื่องหมายจุลภาคคั่นระหว่างพวกเขาหรือแม้กระทั่งหลาย ID ด้วยเครื่องหมายจุลภาคและเว้นวรรคระหว่างพวกเขา
ดังนั้นถ้าคุณทำสิ่งที่ชอบ:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
คุณจะเห็นชื่อของ ID แผนกทั้งหมดที่คุณส่งผ่านใน ...
อีกครั้งสิ่งนี้สามารถทำให้ง่ายขึ้นได้โดยใช้ฟังก์ชั่นเพื่อเติมตารางชั่วคราว ... ฉันทำมันเป็นหลักโดยไม่มีใครฆ่าความเบื่อ :-P
- เควินแฟร์ไชลด์