2017-05-30 134 views
0

我需要從表A到表B(基本上從主表到各自的歷史表)複製/插入具有某個where子句的所有值。使用結果(從Info_schema中選擇的列)選擇查詢

我不想指定列名稱,因爲我想創建一個通用的方法,它將能夠用於所有需要提取的表格。

不幸的是,表A中的屬性並不總是與tableB中的屬性相同,所以我不能在TableA中使用select * into #temp,然後從#temp插入到tableB中。 Plus TableB具有通用的3 sys列,我們爲審計目的而生成這些列。

我的想法是使用Info模式來獲取列名。然後以某種方式使用結果來獲取查詢表中的所有值並將其添加到通用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

2表總是有相同的名稱,數據類型和值的列,期望的序數位置。所有附加列對於所有表都是相同的? –

+1

對於初學者.... mysql或sql server?它們不是同一件事。一旦你決定使用哪個DBMS,你需要澄清這個問題。我不清楚你想要做什麼。 –

+0

@RohitKumar,是的,兩個表具有相同的數據類型。兩者之間的唯一區別在於第二個沒有約束並且有一些額外的列。 –

回答

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 [email protected]_Name 

SET @Query='insert into '[email protected]_Name+'_Log ('[email protected]+',sys_date,sys_flag,sys_name'+') 
select '[email protected]+',Getdate(),''1'',SYSTEM_USER from '+ 'LoginMst' 
--print @Query 
Exec(@Query) 

您將需要迭代所有希望進行備份的表。您還需要添加where子句。

+0

,謝謝。這是工作。正是我需要的。 –

+0

@ valerie-kozel我的榮幸,它符合您的目的,如果您可以將答案標記爲已接受,那麼也可以幫助其他人尋找類似的問題。 –