for*_*orX 1 sql sql-server sql-server-2005 where where-in
我想在WHERE IN子句中使用declare局部变量
像这样的东西:
表XYZ
COL1 COL2
1 A
2 B
3 C
4 D
5 E
Run Code Online (Sandbox Code Playgroud)
结果
1 A
2 B
5 E
Run Code Online (Sandbox Code Playgroud)
QUERY
DECLARE @VAR VARCHAR(MAX)
SET @VAR = '1,2,5'
SELECT * FROM XYZ WHERE COL1 IN @VAR
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
注意:我无法使用服务器功能
我只能创建原始值(通过代码)并将其与我的查询一起使用.我搜索的方式是我只会更改我的var而不是查询本身.
我的代码看起来像:
list (dbparameter)
mylist.add ('@var','1,2,5')
commandsql.returnresult(myQueryInString,mylist)
Run Code Online (Sandbox Code Playgroud)
我想要
DECLARE @var TABLE
(
value INT
)
INSERT
INTO @var
VALUES
(1), (3), (5)
/* You would need three separate inserts in 2005 */
SELECT *
FROM xyz
WHERE col1 IN
(
SELECT value
FROM @var
)
Run Code Online (Sandbox Code Playgroud)
您还可以编写一个表值函数来拆分a CSV,但如果您的客户端库支持传递表变量,则这是一个首选选项.
您可以在Erlang Sommarskog的文章(搜索simple_intlist_to_tbl)中找到函数定义.声明它并像这样调用:
DECLARE @var VARCHAR(100) = '1,3,5'
SELECT *
FROM xyz
WHERE col1 IN
(
SELECT number
FROM simple_intlist_to_tbl(@var)
)
Run Code Online (Sandbox Code Playgroud)
如果您的查询比这更复杂,您可能希望首先实现此列表:
DECLARE @var VARCHAR(100) = '1,3,5'
DECLARE @tvar TABLE
(
number INT
)
INSERT
INTO @tvar
SELECT number
FROM simple_intlist_to_tbl(@var)
SELECT *
FROM xyz, ... /* Other complex joins */
WHERE col1 IN
(
SELECT number
FROM @tvar
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |