如何在SQL查询中重用声明为变量的列名且不输出字符串?
解决SQL Server中通过变量指定列名查询的问题
嘿,我懂你现在的困扰——每月表的列名都要变更,想靠变量复用列名来减少重复代码,但写的查询只输出了字符串ID,没拿到对应列的实际数值,还不想用额外变量存储整个SQL语句,对吧?
这是因为在静态SQL里,你声明的@cal_name会被当成普通的字符串常量处理,SQL Server不会自动把它解析成列名去查询表中的数据。
那咱们可以用sp_executesql直接动态执行拼接好的查询语句,完全不用额外声明存储SQL的变量,写法如下:
DECLARE @cal_name VARCHAR(MAX) = 'ID' EXEC sp_executesql N'SELECT ' + QUOTENAME(@cal_name) + ' FROM Table_A UNION ALL SELECT ' + QUOTENAME(@cal_name) + ' FROM Table_B'
这里的QUOTENAME()函数很重要:
- 它会自动给列名加上合适的分隔符(比如方括号),如果列名包含特殊字符或者是SQL关键字,也能保证语句正确执行
- 同时能有效防止SQL注入风险,让你的动态查询更安全
如果后续列名变更,你只需要修改@cal_name的赋值内容就可以了,完全符合你重用变量的需求。
内容的提问来源于stack exchange,提问作者Jayank
相关产品推荐
相关产品推荐

