使用结果选择查询(从Info_schema中选择的列)

时间:2017-05-30 16:45:51

标签: mysql sql-server

我需要使用表A中的某个where子句复制/插入所有值到表B(基本上从主表到相应的历史表)。

我不想指定列名,因为我想创建一个通用的方法,它可以用于所有需要摄取的表。

不幸的是,表A中的属性并不总是与tableB中的属性相同,所以我不能将select *引入TableA中的#temp,然后从#temp插入tableB。另外,TableB具有通用的3个sys列,我们生成这些列用于审计目的。

我的想法是使用Info模式来获取列名。然后以某种方式使用结果从ask表中获取所有值并添加通用sys列的顶部。有可能吗?

我使用Info架构获取了列名。

Select 
      COLUMN_NAME 
FROM INFORMATION_SCHEMA.columns
where TABLE_NAME = 'TableA' 

SYS列是:

 sys_date=Getdate ()
,sys_flag='1'
,sys_name=SYSTEM_USER

1 个答案:

答案 0 :(得分:0)

使用动态查询SQL Server 请相应更改表名。

Declare @Table_Name varchar(50)
SET @Table_Name ='LoginMst'
Declare @Query varchar(8000)
Declare @ColumnNames varchar (8000)
set @ColumnNames = ''
    select @ColumnNames = 
    case when @ColumnNames = ''
    then column_name
    else @ColumnNames + coalesce(',' + column_name, '')
    end
    from information_schema.columns where Table_Name=@Table_Name

SET @Query='insert into '+@Table_Name+'_Log ('+@ColumnNames+',sys_date,sys_flag,sys_name'+')
select '+@ColumnNames+',Getdate(),''1'',SYSTEM_USER from '+ 'LoginMst'
--print @Query
Exec(@Query)

您需要迭代您希望备份的所有表。您还需要添加where子句。