表TB中有列V1,V2,V3,...V7....V15,其中‘张三’是表某列中的一个值,如何获取到他所在的列?

解决方案 »

  1.   


    CREATE PROCEDURE [dbo].[SP_FindValueInDB] 

    @value VARCHAR(1024) 
    )         
    AS 
    BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    DECLARE @sql VARCHAR(1024)  
    DECLARE @table VARCHAR(64)  
    DECLARE @column VARCHAR(64)  
    CREATE TABLE #t (  
        tablename VARCHAR(64),  
        columnname VARCHAR(64)  
    )  
    DECLARE TABLES CURSOR 
    FOR 
    SELECT o.name, c.name  
    FROM syscolumns c  
    INNER JOIN sysobjects o ON c.id = o.id  
    WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239)  
    ORDER BY o.name, c.name  
    OPEN TABLES  
    FETCH NEXT FROM TABLES  
    INTO @table, @column 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
    SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] ' 
    SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') ' 
    SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', ''' 
    SET @sql = @sql + @column + ''')' 
    EXEC(@sql)  
    FETCH NEXT FROM TABLES  
    INTO @table, @column 
    END 
    CLOSE TABLES  
    DEALLOCATE TABLES  
    SELECT * 
    FROM #t  
    DROP TABLE #t  
    End不管能判断是哪个列,能找到是哪个表的哪个列。参考:
    http://www.cnblogs.com/zhcnblog/archive/2012/09/06/2673419.html
      

  2.   

    叶子厉害~直接执行这个存储过程 EXEC [dbo].[SP_FindValueInDB] @value='张三'
      

  3.   

    alter proc spFind_Column_In_DB
     (
      @type int,--类型:1为文字类型、2为数值类型
      @str nvarchar(100)--需要搜索的名字
     )
     as
      --创建临时表存放结果
      create table #tbl(PK int identity primary key ,tbl sysname,col sysname)
      declare @tbl nvarchar(300),@col sysname,@sql nvarchar(1000)
      if @type=1 
      begin
      declare curTable cursor fast_forward
      for 
      select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id
      where o.type_desc='user_table' and user_type_id in (167,175,231,239,35,99)
       end
      else
      begin 
      declare curTable cursor fast_forward
      for 
      select '['+SCHEMA_NAME(SCHEMA_ID)+'].['+o.name+']' tableName,'['+c.name+']' columnName from sys.columns c inner join sys.objects o on c.object_id=o.object_id
      where o.type_desc='user_table' and user_type_id in (56,48,52,59,60,62,106,108,122)
      end
      open curtable
      fetch next from curtable into @tbl,@col
      while @@FETCH_STATUS=0
      begin
      set @sql='if exists (select * from '+@tbl+' where '
      if @type=1
      begin
      set @sql += @col + ' like ''%'+@str +'%'')'
      end
      else 
      begin
      set @sql +=@col + ' in ('+@str+'))'
      end
     
      set @sql += ' INSERT #TBL(tbl,col) VALUES('''+@tbl+''','''+@col+''')'
      --print @sql
      exec (@sql)
      fetch next from curtable into @tbl,@col
      end
      close curtable 
      deallocate curtable
      select * from #tbl
      

  4.   

    都好复杂的SQL语句啊,如果是在VC中调用呢