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

SQL Server中如何将声明变量存储的列名列表传入SELECT语句

错误原因

  • 你写的SELECT @ValList FROM Depots语句中,SQL引擎会将@ValList识别为普通字符串变量,直接输出它的字面量值,不会自动把变量内的逗号分隔内容解析为查询的列名语法。
  • 额外注意:你当前@ValList里的列名DepLocation和实际Depots表的列名DepotLocation拼写不一致,即使采用动态SQL写法也会报错,需要先修正#list表中存储的列名内容。

正确实现方案

你需要使用动态SQL来执行拼接后的查询语句,示例代码如下:

DECLARE @ValList varchar(8000);
SET @ValList = NULL

-- 先确保#list中的ColumnName拼写正确,生成的@ValList为'DepotID, DepotName, DepotLocation'
SELECT @ValList = COALESCE(@ValList + ', ','') + ColumnName 
FROM #list

-- 拼接完整SQL语句并执行
DECLARE @SQL nvarchar(max);
SET @SQL = N'SELECT ' + @ValList + N' FROM Depots';
EXEC sp_executesql @SQL;

注意事项

  • 动态SQL存在SQL注入风险,如果#list的ColumnName字段内容来源于用户输入,建议使用QUOTENAME()函数包裹列名拼接,做好校验避免注入攻击。
  • 需要控制@ValList的总长度,避免拼接后的SQL语句超出长度限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:02