使用一个字符串,它包含值的查询
问题描述:
使用一个字符串,它包括一个查询使用一个字符串,它包含值的查询
值那么这听起来可能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)
是类似的东西是可行的?
答
您的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并删除引号。
不是你暗示的方式 - 你需要通过动态sql构建查询。 – Siyual
[参数化sql中子句](http://stackoverflow.com/questions/337704/parameterize-an-sql-in-clause?page=1&tab=oldest#tab-top) – SqlZim
@SqlZim - 我不是试图使用参数。我试着这样做是可能的? – BobSki