Вставьте свои данные в таблицу и выполните запрос, как показано ниже
declare @tbl table (ids int, clients varchar(10))
insert into @tbl values
(1,'A')
,(2,'B')
,(3,'C')
,(4,'D')
SELECT * FROM @tbl
declare @value table (Val varchar(10))
insert into @value values
('A')
,('B')
,('C')
,('E')
select ids,t1.Val
from @tbl t
RIGHT JOIN @value t1 on t1.Val = t.clients
Опция оповещения.
declare @tbl table (ids int, clients varchar(10))
insert into @tbl values
(1,'A')
,(2,'B')
,(3,'C')
,(4,'D')
Для SQL Server 2016 и выше
Declare @var varchar(50) = 'A,B,C,E'
SELECT ids, t1.value
FROM @tbl t
RIGHT JOIN STRING_SPLIT(@var, ',') t1 on t1.value = t.clients
Для ниже, чем SQL Server 2016, используйте запрос ниже. Вы должны создать функцию strparse. приведенный ниже сценарий
SELECT ids, t1.Keys
FROM @tbl t
RIGHT JOIN dbo.StrParse (',', @var) t1 on t1.Keys = t.clients
go
Создать функцию разбора строки на строки
CREATE FUNCTION [dbo].[StrParse]
(@delimiter CHAR(1),
@csv NTEXT)
RETURNS @tbl TABLE(Keys NVARCHAR(255))
AS
BEGIN
DECLARE @len INT
SET @len = Datalength(@csv)
IF NOT @len > 0
RETURN
DECLARE @l INT
DECLARE @m INT
SET @l = 0
SET @m = 0
DECLARE @s VARCHAR(255)
DECLARE @slen INT
WHILE @l <= @len
BEGIN
SET @l = @m + 1--current position
SET @m = Charindex(@delimiter,Substring(@csv,@l + 1,255))
IF @m <> 0
SET @m = @m + @l
--insert @tbl(keys) values(@m)
SELECT @slen = CASE
WHEN @m = 0 THEN 255
ELSE @m - @l
END
IF @slen > 0
BEGIN
SET @s = Substring(@csv,@l,@slen)
INSERT INTO @tbl
(Keys)
SELECT @s
END
SELECT @l = CASE
WHEN @m = 0 THEN @len + 1
ELSE @m + 1
END
END
RETURN
END