使用包含查询中的值的字符串
所以这听起来像是一个愚蠢的问题,但我从未做过这样的事情......
我有一个看起来像这样的字符串......
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 :(得分: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 |
+-----------+
拆分字符串参考: