如何将表列名存入局部变量并在SELECT语句中使用?
解决SQL中用局部变量指定列名查询的问题
你当前的代码之所以只返回变量名称,是因为SQL在执行静态查询时,会把@vprice直接当成字符串常量处理,不会将它的值解析为数据表的列名。要实现用变量指定列名查询,得用动态SQL来拼接执行语句,具体写法如下:
DECLARE @vprice VARCHAR(10) SET @vprice = 'salesprice' -- 定义动态SQL语句变量 DECLARE @sql NVARCHAR(MAX) -- 拼接查询语句,用QUOTENAME包裹列名防止SQL注入和语法错误 SET @sql = N'SELECT ' + QUOTENAME(@vprice) + N' FROM dbo.mydata' -- 执行动态SQL EXEC sp_executesql @sql
关键说明
QUOTENAME函数的作用是给列名加上方括号(比如把salesprice变成[salesprice]),避免当列名是SQL关键字或者包含特殊字符时出现语法错误,同时能有效防范SQL注入风险。- 动态SQL是在运行时才生成并执行查询语句,所以能识别变量中的列名。
内容的提问来源于stack exchange,提问作者Georg
相关产品推荐
相关产品推荐

