Değerlerle çok fazla çalışacaksanız, göz önünde bulundurmanız gereken bir yöntem, onları önce geçici bir tabloya yazmaktır. O zaman normal gibi ona katılırsın.
Bu şekilde, yalnızca bir kez ayrıştırırsınız.
'Bölünmüş' UDF'lerden birini kullanmak en kolay yoldur, ancak pek çok kişi bunların örneklerini yayınladı, farklı bir rotaya gideceğimi düşündüm;)
Bu örnek, katılmanız için (#tmpDept) geçici bir tablo oluşturacak ve bunu geçtiğiniz departman kimlikleriyle dolduracaktır. Onları virgülle ayırdığınızı varsayıyorum, ancak - elbette - değiştirebilirsiniz ne istersen ona.
IF OBJECT_ID('tempdb..
BEGIN
DROP TABLE
END
SET @DepartmentIDs=REPLACE(@DepartmentIDs,' ','')
CREATE TABLE
DECLARE @DeptID INT
IF IsNumeric(@DepartmentIDs)=1
BEGIN
SET @DeptID=@DepartmentIDs
INSERT INTO
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
END
END
Bu, bir departman kimliğini, aralarında virgül bulunan birden çok kimliği veya hatta aralarında virgül ve boşluk bulunan birden çok kimliği geçirmenize olanak tanır.
Yani şöyle bir şey yaptıysanız:
SELECT Dept.Name
FROM Departments
JOIN
ORDER BY Dept.Name
Geçtiğiniz tüm departman kimliklerinin adlarını göreceksiniz ...
Yine, bu, geçici tabloyu doldurmak için bir işlev kullanılarak basitleştirilebilir ... Genelde bunu sadece biraz can sıkıntısını gidermek için yaptım: -
- Kevin Fairchild