2017-02-24 141 views
0

使用一個字符串,它包括一個查詢使用一個字符串,它包含值的查詢

值那麼這聽起來可能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://stackoverflow.com/questions/337704/parameterize-an-sql-in-clause?page=1&tab=oldest#tab-top) – SqlZim

+0

@SqlZim - 我不是試圖使用參數。我試着這樣做是可能的? – BobSki

回答

3

我想你想使用動態查詢: -

出下一碼的幫助?

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

1

您的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 +')') 
0

傑夫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 | 
+-----------+ 

分割字符串參考:

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並刪除引號。

相關問題