2016-10-04 16 views
1

SalesというテーブルとSalesHistoryというテーブルがあります。 SalesHistorySalesのレプリカです。ストアドプロシージャをコピーする

Salesテーブルをいつでも削除して、新しい列を追加して古い列を別の名前に変更して、再作成することができます。どのように私は一度sales表がドロップされるという問題を修正して再作成します:私は、それが挿入を必要とするか、今、私は少し失われています

を更新する場合、条件に応じて、saleshistoryテーブルにコピーsalesテーブルからデータをストアドプロシージャを書いていましたsaleshistoryテーブルの変更をどのように修正できますか?私はすでに私の質問私に説明してきた

任意のアイデアや、同じコードが必要な場合、私は私のコードオフのストアドプロシージャを共有することができますが、それは非常に単純です

ここでは、コード

Insert into SalesHistory (Cusip, KeyFeatures1, KeyFeatures2, KeyFeatures3, KeyFeatures4, KeyFeatures5, KeyFeatures6, KeyFeatures7, KeyRisks1, KeyRisks2, KeyRisks3, Comments1, Comments2, Comments3) 
    select 
     Cusip, KeyFeatures1, KeyFeatures2, KeyFeatures3, KeyFeatures4, 
     KeyFeatures5, KeyFeatures6, KeyFeatures7, KeyRisks1, KeyRisks2, 
     KeyRisks3, Comments1, Comments2, Comments3 
    from 
     Sales 
    where 
     not exists (SELECT 1 FROM SalesHistory WHERE cusip = Sales.cusip) 

UPDATE Hist 
SET Cusip = A.Cusip, 
    KeyFeatures1 = A.KeyFeatures1, 
    KeyFeatures2 = A.KeyFeatures2, 
    KeyFeatures3 = A.KeyFeatures3, 
    KeyFeatures4 = A.KeyFeatures4, 
    KeyFeatures5 = A.KeyFeatures5, 
    KeyFeatures6 = A.KeyFeatures6, 
    KeyFeatures7 = A.KeyFeatures7, 
    KeyRisks1 = A.KeyRisks1, 
    KeyRisks2 = A.KeyRisks2, 
    KeyRisks3 = A.KeyRisks3, 
    Comments1 = A.Comments1, 
    Comments2 = A.Comments2, 
    Comments3 = A.Comments3 
FROM 
    SalesHistory Hist 
INNER JOIN 
    Sales A ON A.cusip = Hist.cusip 

ですしようとしています

+0

あなたのコードを正確に共有してください。 – Dijkgraaf

+1

に問題があります。まず名前が変更された列の一覧が必要です。次に、この例のように 'sp_rename'を使用することができます:http://stackoverflow.com/questions/16296622/rename-column-sql-server-2008。 'Sales'テーブルを変更するためのスクリプトを現在どのように生成していますか? –

+0

私のコードを追加しました。 –

答えて

0

テーブルが落とされたときにデータの後ろにいるとすれば...?

残念ながら、ドロップテーブルなどのDDLステートメントではなく、トリガーを作成することはできません。したがって、テーブルを削除する前にデータを単純にコピーすることはできません。ただし、レコードをSalesHistoryに直接挿入するSalesテーブルのAfter Insert、Updateトリガーを作成することができます。こうすることで、Salesテーブルがランダムに削除された場合、SalesHistoryテーブルに既にデータが格納されます。

注意:トリガーはアプリケーションによって望ましくない結果になるので注意してください。また、Sales表のスキーマを制御できない場合は、すべての列の表データをSalesHistory表にコピーして、アプリケーションの存続期間にわたって機能することを確認することは困難です。

しかし、決して変更されないSalesテーブルの列の定義済みリストがある場合は、後で実行することができ、変更されない列を単にコピーするだけです。

+0

forogtに言及すると、sales表をドロップするとsalesmapping表に名前が格納されます。私たちが修正できるものがあります –

関連する問題