Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 其中包含一个局部变量_Sql_Sql Server_Sql Server 2005_Where_Where In - Fatal编程技术网

Sql 其中包含一个局部变量

Sql 其中包含一个局部变量,sql,sql-server,sql-server-2005,where,where-in,Sql,Sql Server,Sql Server 2005,Where,Where In,可能重复: 我想在WHERE in子句中使用declare局部变量 大概是这样的: DECLARE @var VARCHAR(100) = '1,3,5' SELECT * FROM xyz WHERE col1 IN ( SELECT number FROM simple_intlist_to_tbl(@var) ) 表XYZ 结果 1 A 2 B 5 E 质疑 我该怎么做 注: 我没有服务器功能 我只

可能重复:

我想在WHERE in子句中使用declare局部变量

大概是这样的:

DECLARE @var VARCHAR(100) = '1,3,5'

SELECT  *
FROM    xyz
WHERE   col1 IN
        (
        SELECT  number
        FROM    simple_intlist_to_tbl(@var)
        )
表XYZ

结果

1 A
2 B
5 E
质疑

我该怎么做

注: 我没有服务器功能

我只能通过代码创建原语值,并将其用于查询。 我搜索一种只更改var而不更改查询本身的方法

我的代码如下所示:

list (dbparameter)
mylist.add ('@var','1,2,5')

commandsql.returnresult(myQueryInString,mylist)
我想

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
        )
您还可以编写一个表值函数来拆分CSV,但如果您的客户端库支持传递表变量,则这是首选选项

您可以在搜索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)
        )
如果您的查询比这更复杂,您可能希望首先具体化此列表:

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
        )
您还可以编写一个表值函数来拆分CSV,但如果您的客户端库支持传递表变量,则这是首选选项

您可以在搜索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)
        )
如果您的查询比这更复杂,您可能希望首先具体化此列表:

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
        )

您需要一个将列表拆分为Jeff Moden提供的数据集的函数,该函数运行速度非常快,然后只需在所需列上使用IN子句。

您需要一个将列表拆分为Jeff Moden提供的数据集的函数,该函数运行速度非常快,然后只需在所需列上使用IN子句。

,我仍然对论坛模板有问题我不能在数据库中创建函数,我仍然对论坛模板有问题我不能在数据库中创建函数,变量应该在代码中设置,我只有primitif类型。因此,我将无法在@var中推送X个值,而var应该在代码中设置,我只有primitif类型。因此,我将无法在@var中推送X个数值。我无法在服务器上创建函数。您可以在查询中在线运行代码,它也可以正常工作。如果您不想通读本文的全部内容,请滚动到文章的最底部。我无法在服务器上创建函数。您可以在查询中在线运行代码,它也可以正常工作。如果你不想通读整篇文章,请滚动到文章的最底部。