Сначала создайте эту функцию:
CREATE FUNCTION [dbo].[fn_Split]
(@String varchar(8000),
@Delimiter varchar(50))
RETURNS @temptable TABLE (items varchar(8000))
AS
BEGIN
/*
SELECT * FROM dbo.fn_Split('12345;thome', ';')
*/
DECLARE @idx int
DECLARE @slice varchar(8000)
DECLARE @delimiterLength int
SET @delimiterLength = len(@Delimiter)
SELECT @idx = 1
IF LEN(@String) < 1 OR @String IS NULL
RETURN
WHILE @idx != 0
BEGIN
SET @idx = CHARINDEX(@Delimiter, @String)
IF @idx != 0
SET @slice = LEFT(@String, @idx - 1)
ELSE
SET @slice = @String
IF (LEN(@slice) > 0)
INSERT INTO @temptable(Items)
VALUES (LTRIM(RTRIM(@slice)))
SET @String = RIGHT(@String, LEN(@String) - @idx - @delimiterLength + 1)
IF LEN (@String) = 0
BREAK
END
RETURN
END
После создания этой функции вы можете протестировать ее с помощью запроса ниже.
Она разделяет слова с любым передаваемым вами разделителем
select items from dbo.fn_Split('ACCOUNT ,HOD',',')
select items from dbo.fn_Split('ACCOUNT ; HOD',';')
Затем передайте переменную и и используйте соединение с этой функцией.
Используйте псевдоним таблицы для простоты понимания
declare @departmentNames as varchar(max) = ('Account, hod')
select t.*
from tblDepartment t
inner join
(Select items
from dbo.fn_Split (@departmentNames, ',')) A on t.name = A.items
Я создаю temptable для тестирования, и этот запрос вернет вывод, как показано ниже
![enter image description here](https://i.stack.imgur.com/tE2WX.png)