比如说字段名为PJName1的值为aa,我想根据aa这个值取得字段名

解决方案 »

  1.   

    aa可能是字段PJName1的值,也可能是PJName2、PJName3、PJName4的值,我要知道aa这个值是那个字段的。
    注:aa只可能是其中的一个字段的值。
      

  2.   

    可以用类似下面的方法:declare @aa varchar(10),@sql nvarchar(1000),@re bit
    set @aa='aa'   --要查询的字段的值declare @fdname sysname
    declare #tb cursor for select name from syscolumns where object_id('表名')=id
    open #tb
    fetch next from #tb into @fdname
    while @@fetch_status=0
    begin
      set @sql='set @re=case when exists(select 1 from 表名  where '+@fdname+'='''+@aa+''') then 1 else 0 end'
      exec sp_executesql @sql,N'@re bit output',@re output
      if @re=1 goto lbexit
      fetch next from #tb into @fdname
    end
    lbexit:
    close #tb
    deallocate #tbselect 所属字段=@fdname
      

  3.   

    --例子:--创建被查询的表
    create table tb(a varchar(10),b varchar(10))
    insert into tb values('aa','bb')--查询
    declare @aa varchar(10),@sql nvarchar(1000),@re bit
    set @aa='bb'   --要查询的字段的值declare @fdname sysname
    declare #tb cursor for select name from syscolumns where object_id('tb')=id
    open #tb
    fetch next from #tb into @fdname
    while @@fetch_status=0
    begin
      set @sql='set @re=case when exists(select 1 from tb  where '+@fdname+'='''+@aa+''') then 1 else 0 end'
      exec sp_executesql @sql,N'@re bit output',@re output
      if @re=1 goto lbexit
      fetch next from #tb into @fdname
    end
    lbexit:
    close #tb
    deallocate #tbselect 所属字段=@fdname--删除测试环境.
    drop table tb