【问题标题】:Storing set of smallint values for use in 'in' statement存储一组 smallint 值以在“in”语句中使用
【发布时间】:2018-09-21 05:20:13
【问题描述】:

我想为一个变量分配一些数字,以便可以在IN 语句中使用它,如下所示:

declare @var smallint
set @var = 2,3,49,53,34
select something from somewhere WHERE number in @var

但是,这种类型的查询会导致语法错误。我尝试使用几种不同的数据类型(varchar 等),但它也不喜欢那样,反而给了我数据类型转换错误。

我可以创建一个数组或类似的东西吗?我想使用IN 的列是smallint 类型,如果有帮助,我正在使用SQL 2005。

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    对于 SQL 2008 或更高版本:

    declare @variables table (number smallint)
    
    insert into @variables
    values (0),
    (1),
    (2)
    
    select something from somewhere where number in (select number from @variables)
    

    对于 SQL 2005:

    declare @variables table (number smallint) 
    insert into @variables (number) 
    SELECT 2 
    UNION ALL 
    SELECT 3 
    UNION ALL 
    SELECT 49 
    UNION ALL 
    SELECT 53 
    UNION ALL 
    SELECT 34 
    
    select * from @variables
    

    【讨论】:

    • 这给了我Incorrect syntax near ','.,与插入语句有关吗?在 SQL2008 db 上,我得到一个不同的错误,Column, parameter, or variable #1: Cannot find data type number. - 直到我将顺序从 int number 更改为 number int。我已经编辑了你的帖子。但在 SQL 2005 中仍然出现错误。
    • 我不得不使用这个:declare @variables table (number smallint) insert into @variables (number) SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 49 UNION ALL SELECT 53 UNION ALL SELECT 34 select * from @variables
    • 表变量不是在 2008 年引入的吗?
    • @ZoharPeled 不确定它是什么时候出现的,但它似乎可以使用我上面评论的查询,只要我一次只尝试插入 1 个值或使用联合全部
    • 在我的身上也能正常工作……不知道为什么它从来不适合你。该表只需要 1 列,并且每个值只需要插入 1 列......所以它应该可以正常工作。可能是你使用的sql版本,我用的是sql server 2016(我认为)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多