Лично я расположил бы структуру моей таблицы так, чтобы данные, которые я хотел запросить таким образом, не были в списке csv в столбце таблицы.
Если вы решили использовать хранимую процедуру SQL, вы можете использоватьнижеприведенное.Вы можете создать тип таблицы и передать его в приложение. Затем вы можете использовать функцию string_split, чтобы превратить ваш список csv в таблицу, которую вы можете запросить, и оператор all, чтобы проверить, есть ли все в параметре таблицы.Последний бит, где я вызываю процедуру, которую вы бы не делали, вы вместо этого вызывали бы хранимую процедуру в вашем c #, в c # вы можете создать таблицу данных с одним строковым столбцом под названием StringValue, заполнить его списком цветов фильтра и представить какПараметр sql (обратите внимание, что вам нужно указать имя вашего пользовательского типа, иначе вы получите ошибку.)
CREATE DATABASE Mycolours;
go
USE Mycolours
GO
/****** Object: Table [dbo].[Colours] Script Date: 24/04/2019 23:13:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Colours](
[ColourID] [int] NOT NULL,
[ColourList] [nvarchar](50) NOT NULL
) ON [PRIMARY]
GO
GO
insert into [Colours](ColourID,ColourList) values(1,'blue,green,red'),(2,'green'),(3,'blue,green,red,black'),(4,'orange,blue,green,red,gray')
/****** Object: StoredProcedure [dbo].[SPGetAllMyColours] Script Date: 24/04/2019 23:14:10 ******/
SET ANSI_NULLS ON
GO
GO
/****** Object: UserDefinedTableType [dbo].[StringValues] Script Date: 24/04/2019 23:14:32 ******/
CREATE TYPE [dbo].[StringValues] AS TABLE(
[StringValue] [nvarchar](50) NOT NULL,
PRIMARY KEY CLUSTERED
(
[StringValue] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[SPGetAllMyColours]
@colours dbo.StringValues READONLY
AS
BEGIN
select * from colours where not exists(select StringValue from @colours where StringValue = all(select value from string_split(colours.ColourList,',')));
END
GO
GO
DECLARE @return_value int
declare @filterColours dbo.StringValues;
insert into @filterColours(StringValue) values('blue'),('green'),('red');
EXEC @return_value = [dbo].[SPGetAllMyColours] @filterColours
SELECT 'Return Value' = @return_value
GO