--建立HardwareType表:储存商品分类   
--设定'分类'字段为主键   
create       table       HardwareType   
(   
分类       nvarchar(10)       NOT       NULL,   
constraint       pk_HardwareType       Primary       Key       (分类)   
)   
go   --建立HardwareBrand表:储存不同商品分类下的商品品牌   
create       table       HardwareBrand   
(   
分类       nvarchar(10)       NOT       NULL,   
品牌       nvarchar(20)       NOT       NULL   
)   
go   
--创建Foreign       Key约束:分类只能从HardwareBrand表中选择   
alter       table       HardwareBrand   
add       constraint       fk_HardwareBrand   
Foreign       Key       (分类)   
references       HardwareType   
go   
--创建UNIQUE约束:同一分类中不允许出现两个一样的品牌   
alter       table       HardwareBrand   
add       constraint       U_HardwareBrand       unique       (分类,品牌)   
go   
--设定(分类,品牌)联合字段为主键   
alter       table       HardwareBrand   
add       constraint       pk_HardwareBrand       Primary       Key       (分类,品牌)   
go   
insert into HardwareType select 'CPU'
insert into HardwareType select '内存'
--向HardwareBrand表添加数据   
insert       into       HardwareBrand   
values       ('CPU',       'AMD')   
go   
insert       into       HardwareBrand   
values       ('CPU',       'Intel')   
go   
insert       into       HardwareBrand   
values       ('内存',       '金士顿')   
go   
insert       into       HardwareBrand   
values       ('内存',       '宇瞻')   
go   
insert       into       HardwareBrand   
values       ('内存',       '勤茂')   
select * from HardwareBrand/*
分类         品牌                   
---------- -------------------- 
CPU        AMD
CPU        Intel
内存         金士顿
内存         勤茂
内存         宇瞻
*/

解决方案 »

  1.   

    在插入你的数据前先加两行insert into HardwareType select 'CPU'
    insert into HardwareType select '内存'
    否则插入失败
      

  2.   

    在作为外键参照列的表中未有相应的值时,存在外键的表是插不进数据的.
    如果在  HardwareBrand   表中插入的[分类]列值在HardwareType表中不存在,将插不进数据.insert       into       HardwareBrand   
    values       ('内存',       '勤茂')   
    中'内存'如果hardaretype表中未有内存的记录,就插不进数据.
    所以要插入LZ所列数据
    必须先插入hardaretype表
    insert into hardaretype values('CPU')
    insert into hardaretype values('内存')
    插入以上数据后,就可顺利插入LZ的hardwarebrand表的数据删除数据相同道理
    hardwarebrand表中的'内存'记录如果不删除,
    hardwaretype表中的'内存'记录就删除不了.
      

  3.   

    再问下,这样的话,如果我要在--注意下面建立新记录的技巧:1.通过SELECT子句引用已有数据;2.在SELECT子句中修改需要变更的字段。
    insert into HardwareBrand
    select 分类='内存 笔记本',品牌 from HardwareBrand where 分类='内存'go
    insert into HardwareBrand
    select 分类='硬盘 笔记本',品牌 from HardwareBrand where 分类='硬盘'
    补充下这两句是啥意思???
      能不能帮我说下还有 我这样建表,那以后如果还要添加其它数据的话是不是还得要在表HardwareType中的'分类'里添加相同的数据才可以在表HardwareBrand中添加数据.,有没有在表HardwareBrand中添加数据后就可以自动在表HardwareType中自动生成'分类'里面的数据啊????谢谢你们了```
      

  4.   

    再问下,这样的话,如果我要在 --注意下面建立新记录的技巧:1.通过SELECT子句引用已有数据;2.在SELECT子句中修改需要变更的字段。 
    insert   into   HardwareBrand 
    select   分类='内存   笔记本',品牌   from   HardwareBrand   where   分类='内存' go 
    insert   into   HardwareBrand 
    select   分类='硬盘   笔记本',品牌   from   HardwareBrand   where   分类='硬盘' ---你的这个插入是不会成功的,因为你的HardwareType 表中要行存在 '内存   笔记本' '硬盘   笔记本'这两条记录才行
    还有   我这样建表,那以后如果还要添加其它数据的话是不是还得要在表HardwareType中的'分类'里添加相同的数据才可以在表HardwareBrand中添加数据.,有没有在表HardwareBrand中添加数据后就可以自动在表HardwareType中自动生成'分类'里面的数据啊???? 
    ----------------是的,一定要
      

  5.   

     那要怎么样才可以插入类似这样的数据??
    是不是也得在表HardwareType中插入相同的数据???
    那能不能有更好的办法做这样的连接呢
      

  6.   

      那要怎么样才可以插入类似这样的数据?? 
    是不是也得在表HardwareType中插入相同的数据??? 
    那能不能有更好的办法做这样的连接呢 
    -------------
    在表HardwareBrand 上加INSTEAD OF触发器 
      

  7.   

    --建立HardwareType表:储存商品分类   
    --设定'分类'字段为主键   
    create       table       HardwareType   
    (   
    分类       nvarchar(10)       NOT       NULL,   
    constraint       pk_HardwareType       Primary       Key       (分类)   
    )   
    go   --建立HardwareBrand表:储存不同商品分类下的商品品牌   
    create       table       HardwareBrand   
    (   
    分类       nvarchar(10)       NOT       NULL,   
    品牌       nvarchar(20)       NOT       NULL   
    )   
    go   
    --创建Foreign       Key约束:分类只能从HardwareBrand表中选择   
    alter       table       HardwareBrand   
    add       constraint       fk_HardwareBrand   
    Foreign       Key       (分类)   
    references       HardwareType   
    go   
    --创建UNIQUE约束:同一分类中不允许出现两个一样的品牌   
    alter       table       HardwareBrand   
    add       constraint       U_HardwareBrand       unique       (分类,品牌)   
    go   
    --设定(分类,品牌)联合字段为主键   
    alter       table       HardwareBrand   
    add       constraint       pk_HardwareBrand       Primary       Key       (分类,品牌)   
    go   create trigger trig_insrt
    on HardwareBrand
    instead of insert
    as 
    begin
    insert HardwareType select distinct 分类 from inserted I where not exists(select 1 from HardwareType where 分类 = I.分类)
    insert HardwareBrand select * from inserted
    endgo---insert into HardwareType select 'CPU'
    --insert into HardwareType select '内存'
    --向HardwareBrand表添加数据   
    insert       into       HardwareBrand   
    values       ('CPU',       'AMD')   
    go   
    insert       into       HardwareBrand   
    values       ('CPU',       'Intel')   
    go   
    insert       into       HardwareBrand   
    values       ('内存',       '金士顿')   
    go   
    insert       into       HardwareBrand   
    values       ('内存',       '宇瞻')   
    go   
    insert       into       HardwareBrand   
    values       ('内存',       '勤茂')   
    select * from HardwareBrand
    select * from HardwareType
    drop table HardwareBrand,HardwareType/*
    分类         品牌                   
    ---------- -------------------- 
    CPU        AMD
    CPU        Intel
    内存         金士顿
    内存         勤茂
    内存         宇瞻(所影响的行数为 5 行)分类         
    ---------- 
    CPU
    内存(所影响的行数为 2 行)
    */
      

  8.   

    create trigger trig_insrt
    on HardwareBrand
    instead of insert
    as 
    begin
        insert HardwareType select distinct 分类 from inserted I where not exists(select 1 from HardwareType where 分类 = I.分类)
        insert HardwareBrand select * from inserted
    end
    为什么我输入这个 回提示  对象名 'inserted' 无效  ?