mysql - 使用结果选择查询(来自 Info_schema 的选择的列)

标签 mysql sql-server

我需要将带有特定 where 子句的所有值从表 A 复制/插入到表 B(基本上是从主表到相应的历史表)。

我不想指定列名称,因为我想创建一个通用方法,该方法将能够用于所有需要摄取的表。

不幸的是,表 A 中的属性并不总是与表 B 中的顺序相同,因此我无法使用 select * into #temp from TableA 然后从 #temp 插入 tableB。另外,TableB 有通用的 3 个系统列,我们生成这些列是为了审计目的。

我的想法是使用信息模式来获取列名称。然后以某种方式使用结果从询问表中获取所有值并添加到通用系统列的顶部。可以吗?

我通过使用信息架构获取了列名称。

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

SYS 列是:

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

最佳答案

使用动态查询 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 子句。

关于mysql - 使用结果选择查询(来自 Info_schema 的选择的列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44267740/

相关文章:

mysql - 如何合并两个具有相同架构的 mysql 数据库?

mysql - 如何解决hibernate中的sql查询?

同一选择查询中的 SQL COUNT

c# - 如何使用 SQL Server 在 C# 中循环值

c# - Entity Framework 6 Guid 生成空?

php - 错误地将小时添加到 MySQL 表列时间戳 Laravel

MySQL 时间戳问题

php - 无法通过 PHP 表单插入到我的 sql 表中

sql-server - 1D 中两条线段之间最短距离的高效算法

c# - 使用 servicestack ormlite 动态创建(并从中选择)表