如何使用 sql select 查询通过动态字段名称获取值
How to get value by dynamic field Name using sql select query
我正在传递基于该列名的动态列名以获取值,下面是我的 table
Table_CandidateInfo
Id Name Age City
1 Mazhar 30 Gulbarga
20 Khan 29 Bidar
示例 1
Declare @ColumnName varchar(100), @Id int
set @ColumnName='Age'
set @Id=20
select * from Table_CandidateInfo where ID=@Id and
我无法通过 and
查询传递 ColumnName,因为列名是通过代码动态传递的。我的输出应该是
29
示例 2:如果我的 @ColumnName='City' 和 @Id=20 那么输出应该如下所示
Bidar
唉,您不能将标识符作为参数传递。您需要使用动态 SQL:
declare @columnName varchar(100);
declare @Id int;
set @ColumnName = 'Age' ;
set @Id = 20;
declare @sql nvarchar(max);
set @sql = '
select *
from Table_CandidateInfo
where [columnName] = @Id';
select @sql = replace(@sql, '[columnName]', quotename(@columnName));
exec sp_executesql @sql,
N'@id int',
@id=@id;
我想你真正追求的是下面的:
DECLARE @ColumnName sysname, @Id int;
SET @Id = 29;
SET @ColumnName = N'Age';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT ' + QUOTENAME(@ColumnName) + N' FROM dbo.Table_CandidateInfo WHERE Id = @Id;';
--PRINT @SQL; --Your debugging friend
EXEC sp_executesql @SQL, N'@Id int', @Id = @Id;
我正在传递基于该列名的动态列名以获取值,下面是我的 table
Table_CandidateInfo
Id Name Age City
1 Mazhar 30 Gulbarga
20 Khan 29 Bidar
示例 1
Declare @ColumnName varchar(100), @Id int
set @ColumnName='Age'
set @Id=20
select * from Table_CandidateInfo where ID=@Id and
我无法通过 and
查询传递 ColumnName,因为列名是通过代码动态传递的。我的输出应该是
29
示例 2:如果我的 @ColumnName='City' 和 @Id=20 那么输出应该如下所示
Bidar
唉,您不能将标识符作为参数传递。您需要使用动态 SQL:
declare @columnName varchar(100);
declare @Id int;
set @ColumnName = 'Age' ;
set @Id = 20;
declare @sql nvarchar(max);
set @sql = '
select *
from Table_CandidateInfo
where [columnName] = @Id';
select @sql = replace(@sql, '[columnName]', quotename(@columnName));
exec sp_executesql @sql,
N'@id int',
@id=@id;
我想你真正追求的是下面的:
DECLARE @ColumnName sysname, @Id int;
SET @Id = 29;
SET @ColumnName = N'Age';
DECLARE @SQL nvarchar(MAX);
SET @SQL = N'SELECT ' + QUOTENAME(@ColumnName) + N' FROM dbo.Table_CandidateInfo WHERE Id = @Id;';
--PRINT @SQL; --Your debugging friend
EXEC sp_executesql @SQL, N'@Id int', @Id = @Id;