使用包含查询

时间:2017-02-24 21:10:22

标签: sql sql-server vb.net

使用包含查询中的值的字符串

所以这听起来像是一个愚蠢的问题,但我从未做过这样的事情......

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

ValueID = 123, 234, 345, 466, 456

我也有一个类似的查询......

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

所以我现在要做的就是这个...

Select * from Tbl1 where someValue in (ValueID)

这样的事情是可行的吗?

4 个答案:

答案 0 :(得分:3)

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

是下一个代码帮助吗?

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

答案 1 :(得分:1)

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

SET @NUM = 1
SET @UPN=ISNULL(@UPN,'')

DECLARE @OrgUPN NVARCHAR(2000)
SET @OrgUPN = @UPN

        --If Username already exists append number
        While Exists ( select Null from CUSTOMTABLE Where USER_PRINCIPAL_NAME = @UPN)

        BEGIN
            SET @UPN = @OrgUPN+'_'+RTRIM(CONVERT(varchar(10), @NUM))
            SET @NUM = @NUM+1
        END 

现在,它取决于您使用的语言,但是您需要将此变量与查询字符串连接起来,因为SQL查询应该在String中。 要动态执行此操作,您可能需要尝试连接@ahmed abdelqader在下面的答案中说。

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

答案 2 :(得分:1)

这是可行的。

按照此处给出的方法。

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并删除引号。

答案 3 :(得分:0)

使用Jeff 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 |
+-----------+

拆分字符串参考: