【请教】变量作为字段名进行查询并输出

时间:2021-08-15 07:50:21
请教下个sql语句问题。

select @输出变量=@变量X from 表

其中,@变量X=A,A是表中字段名,该字段值是123

我直接这样执行,输出时,@输出变量是“字段名”A,而不是字段A的值123

好像有点绕……

求助

2 个解决方案

#1



-- 创建一个测试表,并写入一条记录
select 100 id, '这是一个字符串' name into test
go
select * from test
go
declare @sql nvarchar(300), @colname varchar(10), @name varchar(30)
set @colname = 'name'
set @sql = 'select @name = ' + @colname + ' from test where id = 100'
exec sp_executesql @sql, N'@name varchar(30) out', @name out
print '查询结果:' + @name
go

drop table test 
go


(1 行受影响)
id          name
----------- --------------
100         这是一个字符串

(1 行受影响)

查询结果:这是一个字符串

#2


USE tempdb
GO
SELECT 'abc' AS [123] INTO Tmp1

GO

DECLARE @Col NVARCHAR(1000)='123'
EXEC('select ['+@Col+'] from Tmp1')
/*
123
abc
*/

#1



-- 创建一个测试表,并写入一条记录
select 100 id, '这是一个字符串' name into test
go
select * from test
go
declare @sql nvarchar(300), @colname varchar(10), @name varchar(30)
set @colname = 'name'
set @sql = 'select @name = ' + @colname + ' from test where id = 100'
exec sp_executesql @sql, N'@name varchar(30) out', @name out
print '查询结果:' + @name
go

drop table test 
go


(1 行受影响)
id          name
----------- --------------
100         这是一个字符串

(1 行受影响)

查询结果:这是一个字符串

#2


USE tempdb
GO
SELECT 'abc' AS [123] INTO Tmp1

GO

DECLARE @Col NVARCHAR(1000)='123'
EXEC('select ['+@Col+'] from Tmp1')
/*
123
abc
*/