Вы имеете в виду, что у вас есть следующая таблица
CREATE TABLE bits
(
id INT PRIMARY KEY,
col1 BIT,
col2 BIT,
col3 BIT,
col4 BIT
)
Заполняется следующим образом
INSERT INTO bits
VALUES (1,0,0,0,0),
(2,1,1,1,1),
(3,1,1,0,0)
И вы передаете в строку
DECLARE @ColumnsList VARCHAR(MAX) = 'col1,col2,col3'
Вы хотите вернуть строку 2, потому что это единственная строка, в которой значение для всех этих столбцов равно 1
?
Если это так, возможно, наиболее разумным решением будет динамический SQL или какой-то побитовый запрос. А пока вот решение без любого из них.
SELECT id
FROM bits UNPIVOT(val FOR col IN (col1, col2, col3, col4)) unpvt
JOIN (SELECT col
FROM (SELECT CAST('<c>' + REPLACE(@ColumnsList, ',', '</c><c>') + '</c>' AS XML) AS x) x
CROSS APPLY (SELECT t.split.value('.', 'sysname') AS col
FROM x.nodes('/c') t(split)) ca) cols
ON cols.col = unpvt.col
GROUP BY id
HAVING COUNT(CASE
WHEN val = 0 THEN 1
END) = 0