--创建表的示例--检查对象是否存在,如果存在,删除
if exists (select * from dbo.sysobjects where id = object_id(N'[主表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [主表]
GOif exists (select * from dbo.sysobjects where id = object_id(N'[从表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [从表]
GO--创建表环境
create table 主表(id varchar(40) not null constraint PK_主表 primary key
,createdate datetime
)create table 从表(id varchar(40) not null
,indexid varchar(40) not null
,value varchar(500)
)
alter table 从表 add constraint PK_从表 PRIMARY KEY CLUSTERED (id,indexid)--添加级联更新
ALTER TABLE dbo.从表 ADD CONSTRAINT
FK_从表_主表 FOREIGN KEY
(
id
) REFERENCES dbo.主表
(
id --主表id
) ON UPDATE CASCADE
 ON DELETE CASCADE

解决方案 »

  1.   

    --创建表的示例2--检查对象是否存在,如果存在,删除
    if exists (select * from dbo.sysobjects where id = object_id(N'[主表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [主表]
    GOif exists (select * from dbo.sysobjects where id = object_id(N'[从表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [从表]
    GO--创建表环境
    create table 主表(id varchar(40) not null constraint PK_主表 primary key
    ,createdate datetime
    )create table 从表(id varchar(40) not null
    ,indexid varchar(40) not null
    ,value varchar(500)
    ,constraint PK_从表 PRIMARY KEY CLUSTERED (id,indexid)
    ,CONSTRAINT FK_从表_主表 FOREIGN KEY(id) REFERENCES dbo.主表(id)
    ON UPDATE CASCADE --级联更新
    ON DELETE CASCADE --级联删除
    )
      

  2.   

    不对呀。我想在已经存在数据的表里建立约束,所以不能把表Drop了。可视化创建时取消“创建中检查现存数据”选项可以建立,但在SQL里怎么写呢?
      

  3.   

    --就这个嘛.--添加级联更新
    ALTER TABLE dbo.从表 ADD CONSTRAINT
    FK_从表_主表 FOREIGN KEY
    (
    id
    ) REFERENCES dbo.主表
    (
    id --主表id
    ) ON UPDATE CASCADE
     ON DELETE CASCADE
      

  4.   

    加了“ON UPDATE CASCADE ON DELETE CASCADE”语法报错“Incorrect syntax near the keyword 'ON'”
      

  5.   

    问题解决了,用这个
    ALTER TABLE dbo.从表 WITH NOCHECK ADD CONSTRAINT
    FK_从表_主表 FOREIGN KEY
    (
    id
    ) REFERENCES dbo.主表
    (
    id --主表id
    )