You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中DECLARE或SET多个值?技术问题咨询

在DECLARE语句中设置多值用于WHERE子句的问题

目标

在DECLARE语句中设置多个值,供WHERE子句的IN条件使用。

问题

无法通过SET语句给变量添加多个值,导致查询无法按预期执行。

尝试实现的代码

DECLARE @Beverage as varchar(1000)
SET @Beverage = ('Water', 'Soda', 'Wine', 'Beer')

SELECT Beverage
FROM ExampleServer
WHERE Beverage in (@Beverage)

当前可正常执行的代码

DECLARE @Beverage as varchar(1000)
SET @Beverage = ('Water')

SELECT Beverage
FROM ExampleServer
WHERE Beverage in (@Beverage)

解决办法

你这么写行不通的核心原因是:varchar类型的变量只能存储单个字符串,括号里的多个值会被SQL当成一整个字符串处理,IN条件自然没法匹配到多个独立的饮品名称。下面给你两种实用的解决方式:

方式1:用表值变量存多值

表值变量可以直接存储多行数据,完美适配IN条件的需求:

-- 先定义一个表值变量,字段类型和要匹配的Beverage一致
DECLARE @BeverageTable TABLE (Name varchar(100))

-- 把需要的多个值插进去
INSERT INTO @BeverageTable (Name)
VALUES ('Water'), ('Soda'), ('Wine'), ('Beer')

-- 查询时直接从表值变量里取数
SELECT Beverage
FROM ExampleServer
WHERE Beverage IN (SELECT Name FROM @BeverageTable)

方式2:用字符串拆分(SQL Server 2016及以上可用)

如果习惯用字符串变量存多值,可以用逗号分隔,再用STRING_SPLIT函数拆成单个值:

DECLARE @Beverage as varchar(1000)
SET @Beverage = 'Water,Soda,Wine,Beer' -- 用逗号把多个值分开

SELECT Beverage
FROM ExampleServer
WHERE Beverage IN (SELECT value FROM STRING_SPLIT(@Beverage, ','))

要是你的SQL Server版本比2016老,那优先用表值变量的方式,兼容性更好;也可以自己写个字符串拆分函数来用,但表值变量的写法更简单直接。


内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:30:59