2017-05-30 16 views
0

特定のwhere句を持つすべての値をテーブルAからテーブルBにコピー/挿入する必要があります(基本テーブルから各履歴テーブル)。結果を使用してクエリを選択してください(Info_schemaから選択した列)

摂取が必要なすべてのテーブルで使用できる汎用アプローチを作成したいので、列名を指定したくありません。

残念ながら、テーブルAの属性は、必ずしもテーブルBと同じ順序であるとは限らないため、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サーバー?彼らは同じことではありません。どのDBMSを使用しているかを決めると、この質問を明確にする必要があります。あなたがしようとしていることは私には分かりません。 –

+0

@RohitKumar、はい、2つのテーブルに同じデータ型があります。 2つの唯一の違いは、2つ目に制約がなく、いくつかの追加の列があることです。 @SeanLange。 –

答えて

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私の喜びは、あなたの目的を果たしました。あなたが答えを受け入れられるとマークすることができれば、他の人も同様の問題を探すのに役立ちます。 –

関連する問題