我需要使用表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
答案 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子句。