CREATE TABLE [dbo].[primary_table](
[ID] [int] identity,
[Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
    constraint   PK_ID   primary   key   (ID)
)CREATE TABLE [dbo].[foreign_table](
[P_ID] [int] NOT NULL,
[P_Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL
)alter table foreign_table
   add constraint FK_primary_table foreign key (P_ID)
      references primary_table (ID)
go-- 禁用所有约束
EXEC sp_msforeachtable
    @command1=N'ALTER TABLE ? NOCHECK CONSTRAINT ALL'--为什么这里还是报错(无法截断表 'primary_table',因为该表正由 FOREIGN KEY 约束引用。)
truncate table primary_table

解决方案 »

  1.   

    truncate table 不能应用于由 foreign key 约束引用的表
    除非具有引用自身的外键的表
    否则不管你是否禁用
      

  2.   

    EXEC sp_msforeachtable
        @command1=N'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
    --貌似只禁用了check约束
      

  3.   

    truncate table相当于drop table 然后 create table
      

  4.   

    晕。。这 detete from 就行了
      

  5.   

    --那就用deletecreate table primary_table(id int primary key,name varchar(10))
    go
    create table Foreign_table(id int primary key,pid int)
    go
    Alter Table Foreign_table 
    Add Constraint fk_1 Foreign Key ( pid ) References primary_table ( id )
    go
    insert primary_table values(1,'A')
    insert Foreign_table values(1,1)
    delete primary_table
    /*
    消息 547,级别 16,状态 0,第 1 行
    DELETE 语句与 REFERENCE 约束"fk_1"冲突。该冲突发生于数据库"master",表"dbo.Foreign_table", column 'pid'。
    语句已终止。
    */
    Alter Table Foreign_table NoCheck Constraint fk_1
    delete primary_table
    /*
    (1 行受影响)*/
      

  6.   


    不行啊,我用导入导出程序先删除目标表数据,他是用truncate table
      

  7.   

    就用SQL Server 导入和导出向导那怎样可以把一个库中的外键导出成脚本?
      

  8.   


    右键数据库,生成脚本,下一步,下一步,编写外键脚本“TRUE”,下一步,选择表,全选,下一步,选择存放的路径或生成在查询编辑器,完成。
      

  9.   


    大神,有没办法用脚本把外键全部导出,因为truncate后还需要重建外键这大批量的几百个外链,一个个搞搞几天下来