1

以下のテーブルにレコードを挿入したいと思います (サンプルデータを含むテーブルの構造)。これを実現するには、TSQL を使用する必要があります。

MasterCategoryID    MasterCategoryDesc  SubCategoryDesc     SubCategoryID
1                   Housing             Elderly              4 
1                   Housing             Adult                5  
1                   Housing             Child                6
2                   Car                 Engine               7
2                   Car                 Engine               7
2                   Car                 Window               8
3                   Shop                owner                9   

たとえば、= 'Town' で新しいレコードを入力すると、それぞれMasterCategoryDescに '4' が挿入されます。MasterCategoryIDSubCategoryDesc + ID

SubCategoryDe​​sc 列と SubCategoryID 列を削除して、この質問を単純化できますか。MasterCategoryID と MasterCategoryDe​​sc の 2 つの列だけでこれを達成するにはどうすればよいですか

4

3 に答える 3

2
INSERT into Table1
([MasterCategoryID], [MasterCategoryDesc], [SubCategoryDesc], [SubCategoryID])
select TOP 1
    case when 'Town' not in (select [MasterCategoryDesc] from Table1) 
        then (select max([MasterCategoryID])+1 from Table1)
        else (select [MasterCategoryID] from Table1 where  [MasterCategoryDesc]='Town') 
    end as [MasterCategoryID]
    ,'Town' as [MasterCategoryDesc]
    ,'owner' as [SubCategoryDesc]
    ,case when 'owner' not in (select [SubCategoryDesc] from Table1) 
        then (select max([SubCategoryID])+1 from Table1)
        else (select [SubCategoryID] from Table1 where  [SubCategoryDesc]='owner') 
    end as [SubCategoryID]
from Table1

SQL フィドル

ご希望があればSPも作成します。しかし、あなたは欲しいと言ったT-SQL

于 2013-06-19T16:01:32.667 に答える
0

MasterCategory用のテーブルと用のテーブルを作成しますSubCategory。であるそれぞれの___ID列を作成しますidentity (1,1)。ロード時に、存在しない値に対して新しい行を挿入し、INSERT.

私の意見では、最大値を見つけて既存のテーブルでデータを検索することは、失敗のレシピです。

于 2013-06-19T16:20:56.110 に答える
0

これには、できれば単一のストアド プロシージャで、3 つの手順が必要です。トランザクション内であることを確認してください。

a) 挿入しようとしている MasterCategoryDe​​sc が既に存在するかどうかを確認します。もしそうなら、そのIDを取ります。そうでない場合は、最大の MasterCategoryID を見つけ、1 ずつ増やして変数に保存します。

b) SubCategoryDe​​sc および SubCategoryID と同じ。

c) ステップ a と b で作成した 2 つの変数を含む新しいレコードを挿入します。

于 2013-06-19T15:58:22.927 に答える