当名称存储在本地var中时,从表中选择列

时间:2016-09-21 12:20:42

标签: sql sql-server

我有这种情况:

declare @data table (Name varchar(100), Surname varchar(100), Extension int )

insert into @data 
    select 
        Comp.Name, Comp.Surname, Comp.Ext 
    from 
        Comp 
    where 
        Comp.Dept = 25

declare @fieldName varchar(100) = 'Name'
declare @getter varchar(100)
select @getter = (@fieldName) from @data where Extension=101

我需要在@getter中加入“Jhon”,“Mary”或“Peter”等等......

如果我将@fieldName的值更改为Surname,我应该得到他们的姓氏。

有点难以解释,但我需要的是在存储在本地var中的查询中引用列名

3 个答案:

答案 0 :(得分:2)

使用以下查询。

DECLARE @fieldName VARCHAR(100) = 'Name'
DECLARE @getter VARCHAR(100)=''
DECLARE @sql  NVARCHAR(MAX) ='declare @data table (Name varchar(100), Surname varchar(100), Extension int )
                              insert into @data select Comp.Name, Comp.Surname, Comp.Ext from Comp where Comp.Dept=25
                              SELECT @Output='+@fieldName+' from @data where Extension=101'
EXEC sp_executesql  @sql,N'@Output NVARCHAR(100) OUT',@getter OUT
SELECT @getter

答案 1 :(得分:0)

例如:

<ion-content>
  <div collection-repeat="month in months"
    item-height="200px">
    //month template
  </div>
</ion-content>

希望有所帮助

答案 2 :(得分:0)

给定WHERE子句和临时表,您可以简单地从表中选择,避免使用临时表。此示例使用CASE,如果您需要更多列,请对其进行修改/添加;如果需要Dept和Ext,请使用其他参数,不需要任何棘手的代码。

如果只有多个匹配项,则只需要一个TOP 1

DECLARE @col VARCHAR(50)
SET @col = 'Name'
SELECT 
 CASE 
   WHEN (@col='Name') THEN Comp.Name
   WHEN (@col='Surname') THEN Comp.Surname
 END AS SearchName
FROM Comp 
WHERE Comp.Dept=25 
  AND Comp.Ext=101

请注意,这不使用动态SQL,可以设置为参数化查询,使其更安全。

这是一个简单的小提琴来测试它:https://w3c.github.io/ServiceWorker/