値を頻繁に操作する場合に考慮すべき方法の 1 つは、最初に値を一時テーブルに書き込むことです。あとは普通に参加するだけです。
この方法では、解析は 1 回だけです。
「分割」UDF の 1 つを使用するのが最も簡単ですが、非常に多くの人がそれらの例を投稿しているので、別のルートに行くことにしました ;)
この例では、結合するための一時テーブル (#tmpDept) を作成し、渡した部門 ID を入力します。コンマで区切っていると仮定していますが、もちろん、変更することもできます。それをあなたが望むものにします。
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
これにより、1 つの部門 ID、コンマで区切られた複数の ID、コンマとスペースで区切られた複数の ID を渡すことができます。
したがって、次のようなことをした場合:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
渡したすべての部門 ID の名前が表示されます...
繰り返しますが、これは関数を使用して一時テーブルにデータを入力することで簡素化できます...私は主に退屈を殺すために関数なしでそれを行いました:-P
-- ケビン・フェアチャイルド