使用一个字符串,它包含值的查询

问题描述:

使用一个字符串,它包括一个查询使用一个字符串,它包含值的查询

值那么这听起来可能likea愚蠢的问题,但我从来没有做过的东西liek这个....

我有一个看起来像这样的字符串....

ValueID = 123, 234, 345, 466, 456 

我也有一个查询,是这样的......

Select * from Tbl1 where SomeValue In (123,234,345, 466, 456) 

那么我想现在要做的就是这...

Select * from Tbl1 where someValue in (ValueID) 

是类似的东西是可行的?

+0

不是你暗示的方式 - 你需要通过动态sql构建查询。 – Siyual

+4

[参数化sql中子句](http://*.com/questions/337704/parameterize-an-sql-in-clause?page=1&tab=oldest#tab-top) – SqlZim

+0

@SqlZim - 我不是试图使用参数。我试着这样做是可能的? – BobSki

我想你想使用动态查询: -

出下一码的帮助?

declare @ValueID varchar(200) 
set @ValueID = '123, 234, 345, 466, 456' 
exec ('Select * from Tbl1 where someValue in ('+ @ValueID +')') 
+0

是的,我在vb.net中做了(“&ValueID&”),它完成了这项工作! – BobSki

+0

@BobSki这是.. sql注入.. http://bobby-tables.com/ – SqlZim

+0

@sqlzim - 内部。我不担心 – BobSki

您的ValueID var应该是一个字符串。

ValueID = '123, 234, 345, 466, 456'; 

现在,这取决于你所使用的语言,但你需要连接具有查询字符串这个变量,因为SQL查询应该是字符串。 要做到这一点动态你可能想尝试和连接作为@ahmed abdelqader在下面的答案中说。

declare @ValueID varchar(200) 
set @ValueID = '123, 234, 345, 466, 456' 
exec ('Select * from Tbl1 where someValue in ('+ @ValueID +')') 

杰夫MODEN使用CSV分路器功能:

create table v (ValueId varchar(8000)) 
insert into v values ('123, 234, 345, 466, 456'); 

create table t (someValue int); 
insert into t values (345),(346) 

select * 
from t 
where someValue in (
    select x.Item 
    from v 
    cross apply (
     select Item 
     from [dbo].[delimitedsplit8K](v.ValueId,',') 
     ) as x 
    where x.Item <>'' 
    ) 

测试设置:http://rextester.com/GRNWY13179

回报:

+-----------+ 
| someValue | 
+-----------+ 
|  345 | 
+-----------+ 

分割字符串参考:

这是可行的。

按照此处给出的方法。

DECLARE @MyList TABLE (Value VARCHAR(10)) 
INSERT INTO @MyList VALUES ('123') 
INSERT INTO @MyList VALUES ('234') 
[...] 

SELECT * 
FROM MyTable 
WHERE MyColumn IN (SELECT Value FROM @MyList) 

这是从Define variable to use with IN operator (T-SQL)我的首选答案。这实现了原始问题的目标,我想。通过建立一个值列表,在这种情况下字符串值,IN操作符将按预期工作。如果您想要INT值,只需将VARCHAR更改为INT并删除引号。