在参数表中插入数据

时间:2018-10-03 14:46:15

标签: sql sql-server

我需要将新数据插入参数表。这是一个INSERT INTO子句类型问题。

表A登台

Id    Owner           Brand        CreationDate CreationUser
1     Shakespeare   Rolls Royce      2011-04-22    Burbage
3     Aristotle     Tesla            2014-12-25    Plato
9     Einstein      MayFlower        2015-01-01    Bohr

表B参数化

Id   BrandDescription 
1     Rolls Royce
2     Tesla          
3     MayFlower   

将品牌(表b)的ID映射到表A的品牌后的表C

Id    Owner           BrandId      CreationDate CreationUser
1     Shakespeare       1           2011-04-22    Burbage
3     Aristotle         2           2014-12-25    Plato
9     Einstein          3           2015-01-01    Bohr

现在假设在表A登台中输入了两个新记录。

  Id    Owner           Brand         CreationDate CreationUser
  1     Shakespeare   Rolls Royce      2011-04-22    Burbage
  3     Aristotle     Tesla            2014-12-25    Plato
  9     Einstein      MayFlower        2015-01-01    Bohr
  17    John Bardeen  Tesla2           2017-01-02    Nikola
  18    Sanger        Phaeton          2018-03-01    Curie

我想将两个新品牌添加到参数表B ... 因此可能是:

    Id   BrandDescription  CreationDate  CreationUser
    1     Rolls Royce       2011-04-22      Automatic
    2     Tesla             2014-12-25      Automatic
    3     MayFlower         2015-01-01      Automatic
    4     Tesla2            2017-01-02      Automatic    
    5     Phaeton           2018-03-01      Automatic

我尝试过:

    If not exists (select 1 from 
                    from  table_b tb 
                    inner join table_a ta on tb.BrandDescription=ta.Brand)      insert into table_b
values (ta.Brand,getdate(),'Automatic')

它抛出一个错误: 无法绑定多部分标识符“ ta.Brand”。

它必须始终检查参数化表,以检查表A阶段的新记录中是否存在任何品牌...因此,由于旧参数化表中不存在Tesla2和Phaeton,因此应将其插入。否则,什么也不会发生。

再创一条新记录

(用于表A)

Id    Owner           Brand         CreationDate CreationUser
(...)
17    John Bardeen  Tesla2           2017-01-02    Nikola
18    Sanger        Phaeton          2018-03-01    Curie
19    Sagan         Tt:              2019-02-01    Lok

如果品牌中有,则不应将其插入参数化表B中。

If not exists (select 1 
               from table_b tb 
               inner join table_a ta on tb.BrandDescription=ta.Brand and ta.Brand not like '%' + ':' + '%')     
    insert into table_b
    values (ta.Brand,getdate(),'Automatic')

问题是将表A的品牌分配给参数化表B的BrandDescription。

1 个答案:

答案 0 :(得分:1)

您可以尝试在没有if子句的情况下执行此操作,这是在尝试访问insert语句范围内不存在的列(ta.brand)。

例如:

{{1}}