如何无需表变量为@XYZId变量赋值多个整数并返回全部ID
解决方法:将多个整数值赋值给变量并输出所有结果
首先得搞清楚为什么你原来的代码只输出27:@XYZId是单个整数变量,当你用SELECT @XYZId = ABCId ...的时候,SQL会逐行给变量赋值,每一行都会覆盖之前的值,最后自然只保留查询结果的最后一条记录(也就是27)。
因为单个整数变量根本没法存储多个值,所以我们得换个思路,下面给你两种符合要求的方案(不用表变量、不用插入多个值):
方案1:将多个ID合并成一个字符串变量输出
如果希望把所有ID放在一个变量里,用分隔符分开,你可以把变量类型改成VARCHAR(MAX),然后通过字符串拼接实现:
DECLARE @XYZId VARCHAR(MAX) SELECT @XYZId = COALESCE(@XYZId + ', ', '') + CAST(ABCId AS VARCHAR) FROM ABCTable WHERE ABCId IN (1,9,18,27) SELECT @XYZId -- 输出结果:1, 9, 18, 27
这里COALESCE用来处理变量初始为NULL的情况,避免开头出现多余的分隔符,然后把每个ABCId转成字符串后拼接到变量里。
方案2:直接返回多行结果(无需变量)
如果你只是想输出所有符合条件的ID,其实完全不需要用变量,直接执行查询即可:
SELECT ABCId AS XYZId FROM ABCTable WHERE ABCId IN (1,9,18,27)
执行后会返回4行结果,每行对应一个ID:1、9、18、27,这也是最直接的方式。
简单总结一下:单个整数变量只能存一个值,所以要么把变量改成字符串类型来拼接多个ID,要么直接查询返回多行结果,根据你的实际需求选择就行。
内容的提问来源于stack exchange,提问作者karthik karne
相关产品推荐
相关产品推荐

