値を頻繁に処理する場合に検討する方法の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
-ケビンフェアチャイルド