如果您要大量使用这些值,您可能需要考虑的一种方法是首先将它们写入临时表。然后你就像平常一样加入它。
这样,您只解析一次。
使用“拆分”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
——凯文·费尔柴尔德