我需要将带有特定 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/