передача списка столбцов в хранимую процедуру - PullRequest
4 голосов
/ 08 марта 2011

хорошо, вот моя ситуация, у меня есть список переменных, которые я хочу передать в хранимую процедуру.каждая переменная представляет столбец в базе данных (dbImage) и имеет логическое значение.

--Columnslist contains Var1, Var2, Var3
@ColumnsList varchar(Max)

Я хочу передать их в оператор выбора, а var1, var2 и var3 как true

SELECT @ColumnsList from dtImage WHERE @ColumnsList = True

Я знаю, что это может сбить с толку, я знаю, что я хочу сделать.Мне просто очень трудно объяснить, что я хочу сделать.

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Вы имеете в виду, что у вас есть следующая таблица

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  
0 голосов
/ 08 марта 2011

Вы можете создать динамический SQL-оператор и выполнить его с помощью sp_ExecuteSql
http://msdn.microsoft.com/en-us/library/ms188001.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...