Рассмотрим следующее, используя динамический SQL. Вероятно, это не самый лучший метод, но это единственный способ, который я могу придумать, чтобы не выдавать несколько операторов выбора для вашей таблицы. Предполагается, что вы очистили свой список значений и сначала сделали проверку ошибок ...
CREATE TABLE #tmp
(
ID INT,
col1 BIT,
col2 BIT,
col3 BIT,
col4 BIT
)
INSERT INTO #tmp (ID, col1, col2, col3, col4) VALUES (12,0,1,0,0)
INSERT INTO #tmp (ID, col1, col2, col3, col4) VALUES (13,1,0,0,0)
INSERT INTO #tmp (ID, col1, col2, col3, col4) VALUES (14,0,0,1,0)
INSERT INTO #tmp (ID, col1, col2, col3, col4) VALUES (15,0,0,0,1)
DECLARE @List VARCHAR(255)
SELECT @List = '1,2,3'
-- create dynamic sql statement
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT ID FROM #tmp WHERE '
-- append where statement
IF CHARINDEX('1',@List) > 0 BEGIN
SET @sql = @sql + 'col1 = 1 OR '
END
IF CHARINDEX('2',@List) > 0 BEGIN
SET @sql = @sql + 'col2 = 1 OR '
END
IF CHARINDEX('3',@List) > 0 BEGIN
SET @sql = @sql + 'col3 = 1 OR '
END
IF CHARINDEX('4',@List) > 0 BEGIN
SET @sql = @sql + 'col4 = 1 OR '
END
-- remove the trailing 'OR' and execute
SET @sql = SUBSTRING(@sql,0,LEN(@sql)-2)
EXEC (@sql)