Salah satu metode yang mungkin ingin Anda pertimbangkan jika Anda akan bekerja dengan banyak nilai adalah dengan menuliskannya ke tabel sementara terlebih dahulu. Maka Anda tinggal bergabung seperti biasa.
Dengan cara ini, Anda hanya mengurai satu kali.
Ini paling mudah untuk menggunakan salah satu UDF 'Pisah', tetapi begitu banyak orang telah memposting contoh-contoh itu, saya pikir saya akan mengambil rute yang berbeda;)
Contoh ini akan membuat tabel sementara untuk Anda ikuti (#tmpDept) dan mengisinya dengan id departemen yang Anda lewati. Saya berasumsi Anda memisahkannya dengan koma, tetapi Anda dapat - tentu saja - mengubah untuk apa pun yang Anda inginkan.
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
Ini memungkinkan Anda untuk melewati satu id departemen, beberapa id dengan koma di antaranya, atau bahkan beberapa id dengan koma dan spasi di antara mereka.
Jadi jika Anda melakukan sesuatu seperti:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
Anda akan melihat nama-nama semua ID departemen yang Anda lewati ...
Sekali lagi, ini dapat disederhanakan dengan menggunakan fungsi untuk mengisi tabel sementara ... Saya terutama melakukannya tanpa satu hanya untuk membunuh beberapa kebosanan :-P
- Kevin Fairchild