好的,这是我的情况,我有一个我希望传递给存储过程的变量列表。每个变量代表一个数据库中的列(dbImage)并且是布尔值。
--Columnslist contains Var1, Var2, Var3
@ColumnsList varchar(Max)
我想将它们传递给select语句,将var1,var2和var3传递给true
SELECT @ColumnsList from dtImage WHERE @ColumnsList = True
我知道这可能令人困惑,我知道我想做什么。我只是很难解释我想做什么。
答案 0 :(得分:1)
你的意思是假设你有一张表如下
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
答案 1 :(得分:0)
您可以创建动态sql语句并使用sp_ExecuteSql
执行它
http://msdn.microsoft.com/en-us/library/ms188001.aspx