2016-04-18 11 views
5

私はSQLの初心者ですので、この1つを私にご負担ください。私のプロジェクトは次の通りです:MSSQL - エントリが別のテーブルに追加されたときに自動的にエントリを1つのテーブルに追加する方法はありますか?

Windows Server 2008 R2でMSSQLを使用しています。

既存のデータベーステーブルがあります。これはPRODUCTSと呼ばれます。数千行のデータが含まれています。これは、X社が販売するすべての製品の製品情報です。私が興味を持っている3つのコラムは、ITEMGROUPID、ITEMID、ITEMNAMEです。 ITEMIDはこの表の主キーであり、固有の製品コードです。 ITEMGROUPIDは、各アイテムがどのカテゴリに分類されるかを示し、ITEMNAMEは自明です。私は製品の1つのカテゴリにのみ関心があるので、ITEMGROUPIDを使用することで、私のテーブルにいくつの行があるかを判断できます(現在260)。

これらの製品を作成するためのパラメータを含むテーブルを作成しています.LINEPARAMETERSと呼んでいます。たとえば、ウィジェットAを作成する場合、コンベアBを速度Cで実行する必要があります。私のテーブルには、別のテーブルのITEMIDを指す外部キーを作成する予定です。したがって、新しいテーブルの各行は、既存の製品データベース内の特定の製品を参照します。

私の基準(ITEMGROUPID = 'VALUE')に一致し、既存のテーブルにITEMIDで入力した新製品が開発された場合、私のテーブルが自動的に新しい行を生成する方法はありますか?そのITEMIDと他のすべての列のデフォルト値?

答えて

3

あなたはproductに、インサート上の火災やlineparametersに行を挿入し、このようにすることをトリガーを作成することができます。

create trigger line_parameter_inserter 
on products 
after insert 
as 
    insert into lineparameters (productId, col1, col2) 
    values (inserted.id, 'foo', 'bar'); 

が、より良いオプションは、あなたのグループに、製品テーブルから外部キーを作成することですデフォルトのテーブルは、行が前に、デフォルトテーブルに存在している必要があり、その方法は、あなたは、このように、製品テーブルを挿入します。

create table lineparameters (
    id int, 
    col1 int, 
    ..., 
    primary key (id) 
) 

create table products (
    id int, 
    lineparametersId int not null, 
    ... 
    primary key (id), 
    foreign key (lineparametersId) references lineparameters(id) 
) 

これは固体のプロセスを作成し、THAを保証しますたとえ誰か(黙って)トリガを無効/削除しても、データの整合性に問題はありません。

+0

私はあなたが何を意味しているかはっきりしていません。あなたが参照しているテーブルについてあまりあいまいにならないように、私は自分の投稿を編集して2つのテーブルに名前を定義しました。混乱を避けるためにこれらのテーブル名を使ってあなたの提案を説明できますか? – ASForrest

+0

@ASForrest OK、コード例 – Bohemian

+0

で更新された答えは分かりました。しかし、PRODUCTSテーブルの製品の約10%だけが実際にテーブル(ITEMGROUPID = 'VALUE'のもの)にエントリを必要とするため、データの整合性に問題がないことを確認していますが、わかりませんそれは私の最善の方法です。そのトリガーが削除された場合、すべてが表示されます。それを自動的に行うことは本当にうれしいことです。トリガーメソッドに固執する場合、PRODUCTSに挿入されたばかりの行(ITEMGROUPID = 'VALUE')にLINEPARAMETERSに行を挿入するにはどうすればよいでしょうか? 'ITEMGROUPID = 'VALUE'以外の製品の場合は – ASForrest

関連する問題