您可能要考虑的一种方法是,如果要大量使用这些值,请先将它们写入临时表。然后,您只需像平常一样加入即可。
这样,您只需解析一次。
使用其中一种“拆分” UDF最简单,但是有很多人发布了这些示例,我认为我会走另外一条路;)
本示例将创建一个临时表供您加入(#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
这将允许您传入一个部门ID,在多个ID之间使用逗号分隔,甚至在多个ID之间使用逗号和空格传递。
因此,如果您执行以下操作:
SELECT Dept.Name
FROM Departments
JOIN #tmpDept ON Departments.DepartmentID=#tmpDept.DeptID
ORDER BY Dept.Name
您会看到传入的所有部门ID的名称...
同样,可以使用函数填充临时表来简化此操作...我主要是在没有一个函数的情况下这样做的,只是为了消除一些无聊的事情:-P
-凯文·费尔柴尔德(Kevin Fairchild)