TSQL插入记录和跟踪ID

时间:2013-06-19 15:03:22

标签: sql tsql

我想在下面的表格中插入记录(带有示例数据的表格结构)。我必须使用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   

例如,如果我使用MasterCategoryDesc ='Town'输入新记录,则会在MasterCategoryID中将{4'插入相应的SubCategoryDesc + ID

我可以通过删除SubCategoryDe​​sc和SubCategoryID列来简化这个问题。如何使用2列MasterCategoryID和MasterCategoryDe​​sc

来实现此目的

3 个答案:

答案 0 :(得分: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 FIDDLE

如果你想我也可以创建一个SP。但是你说你想要一个T-SQL

答案 1 :(得分:0)

这将需要三个步骤,最好是在一个存储过程中。确保它在交易中。

a)检查您尝试插入的MasterCategoryDe​​sc是否已存在。如果是,请使用其ID。如果没有,找到最高的MasterCategoryID,增加1,并将其保存到变量。

b)与SubCategoryDe​​sc和SubCategoryID相同。

c)使用您在步骤a和b中创建的两个变量插入新记录。

答案 2 :(得分:0)

MasterCategory创建一个表,为SubCategory创建一个表。为每个___ID制作一个identity (1,1)列。加载时,为不存在的值插入新行,然后查找INSERT的现有值。

在我看来,在现有表格中查找Max并查找数据时,如果发现失败的话,那就很容易了。