选择源表和视图表映射编辑错误提示:操作已停止...- 正在初始化数据流任务 (成功)- 正在初始化连接 (成功)- 正在设置 SQL 命令 (成功)- 正在设置源连接 (成功)- 正在设置目标连接 (成功)- 正在验证 (错误)
消息
* 错误 0xc002f210: 准备 SQL 任务: 执行查询“TRUNCATE TABLE [dsc100552_db].[dbo].[ALV_SalesBigClass]
”失败,错误如下:“无法截断表 'dsc100552_db.dbo.ALV_SalesBigClass',因为该表正由 FOREIGN KEY 约束引用。”。失败的原因可能有: 查询本身有问题、未正确设置 "ResultSet" 属性、未正确设置参数或未正确建立连接。
 (SQL Server 导入和导出向导)
- 准备执行 (已停止)- 执行之前 (已停止)- 正在执行 (成功)- 正在复制到 [dsc100552_db].[dbo].[ALV_Sales] (已停止)- 正在复制到 [dsc100552_db].[dbo].[ALV_SalesBigClass] (已停止)- 正在复制到 [dsc100552_db].[dbo].[ALV_SalesSmallClass] (已停止)- 执行之后 (已停止)- 清除 (已停止)

解决方案 »

  1.   

    * 错误 0xc002f210: 准备 SQL 任务: 执行查询“TRUNCATE TABLE [dsc100552_db].[dbo].[ALV_SalesBigClass] 
    ”失败,错误如下:“无法截断表 'dsc100552_db.dbo.ALV_SalesBigClass',因为该表正由 FOREIGN KEY 约束引用。”。失败的原因可能有: 查询本身有问题、未正确设置 "ResultSet" 属性、未正确设置参数或未正确建立连接。
    查询本身有问题应该不会,那么就是未正确设置 "ResultSet" 属性、未正确设置参数或未正确建立连接的原因了
      

  2.   

    那是因为你这三个表中有其他表的子表,
    而这个第四个主表的数据没有导入,
    所以会有错误.
    假设你的关系是这样的. 
    [dsc100552_db].[dbo].[ALV_Sales]这个表是某个表的子表A.而这个A表的数据你没有导入过了.所以会产生ALV_Sales表导致外键约束错误.
    根据你的表名称看,ALV_SalesBigClass和ALV_SalesSmallClass应该是SalesClass或者类似的表的子表,
    可能是你的SalesClass这个表的数据不完整导致外键约束错误. 
      

  3.   

    只有这三个表了,情况如下:ALV_SalesBigClass (主键:SalesBigClassID) 是大类
    主要字段
    SalesBigClassID
    BigClassNameALV_SalesSmallClass (主键:SalesSmallClassID) 是小类
    主要字段
    SalesSmallClassID
    SalesBigClassID
    SmallClassName
    外键关系:
    ALV_SalesSmallClass.SalesBigClassID = ALV_SalesBigClass.SalesBigClassID
    ALV_SalesSmallClass.SalesSmallClassID = ALV_Sales.SalesSmallClassIDALV_Sales (主键:SalesID)是最终的内容
    主要字段
    SalesID
    SalesSmallClassID
    SaleaName
      

  4.   

    真郁闷,现在本机的数据调试好了,就是上不了服务器,以前用SQL 2000的时候,都挺好的,看样子 SQL 2005 有些功能还不熟。
      

  5.   


    经过几个小时的琢磨,直接执行 TRUNCATE TABLE [dsc100552_db].[dbo].[ALV_SalesBigClass] 该语句,都会出现同样的错误提示。查阅资料说是:对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。请问哪么大侠知道在哪里设置: "ResultSet" 属性、未正确设置参数 ? (我琢磨也是这个原因,大家在平时设计数据库时就没有碰到过这种外键约束引用的错误吗? 我在SQL 2000上是没有碰到过,在SQL 2005上还是第一次)
      

  6.   

    建立了主外键的表,在导数据的过程中是要麻烦很多,特别是在向外表导数据的情况下。你可以按照以下提供的方式导入数据。
    首先假设有这样的主外表关系:use test
    gocreate table dbo.Test_Primary
    (
    id int identity(1,1)
    ,name varchar(10)
    ,constraint pk_Test_Primary primary key
    (
    id ASC
    )
    )create table dbo.Test_FOREIGN
    (
    id int identity(1,1)
    ,For_ID INT
    ,CONSTRAINT for_Test_FOREIGN_Test_Primary_For_ID FOREIGN KEY (For_ID)REFERENCES Test_Primary (ID)
    ,name varchar(10)
    ,constraint PK_Test_FOREIGN primary key
    (
    id ASC
    )
    )--1.建立一个Bak表来临时存放要导入的数据(表结构要和导入的表一致,除了Index,Constraint,但必须建立主键)
    create table dbo.Test_FOREIGN_Bak
    (
    id int identity(1,1)
    ,For_ID INT
    ,name varchar(10)
    ,constraint PK_Test_FOREIGN primary key
    (
    id ASC
    )
    )--2.将要导入的数据,先导入Bak表(dbo.Test_FOREIGN_Bak,因为这个是空表,肯定会成功)
    --可以用DTS(2000的比较快,说实话,我不喜欢用SQL 2K5的DTS)、SSIS包(这个比较麻烦)或者是BCP(比较适合大容量数据导入导出)--3.将Bak表作为数据来源向正式表导入数据(这个地方是最关键的,不是一股脑儿的导就行了,要进行筛选的)
    /*
    这个地方要特别注意,要是在表dbo.Test_FOREIGN建有Replication的话,建议不要一次性Insert 10万级别的数据,
    特别是表数据字段比较宽的时候,这样会带给Distribution库很大的压力,很可能导致网络拥塞或Server反应缓慢。
    可以考虑循环Insert,每次循环最好能够Delay 5~10秒
    */
    set identity_insert dbo.Test_FOREIGN on
    insert into dbo.Test_FOREIGN
    (
    id
    ,For_ID
    ,name
    )
    select id
    ,For_ID
    ,name
    from dbo.Test_FOREIGN_Bak as a with (nolock)
    where not exists(select top 1 1--排出主键冲突
    from dbo.Test_FOREIGN as b with (nolock)
    where a.id=b.id)
    and For_ID IN (select id--如果For_ID不在主表中,就会报告问题中的错误
    from dbo.Test_Primary with (Nolock)
    )
    set identity_insert dbo.Test_FOREIGN off
    --4.删除Bak表
    truncate table dbo.Test_FOREIGN_Bak
    drop table dbo.Test_FOREIGN_Bak
      

  7.   


    道理很简单,你自己想下就明白了啊有二表a,b
    ta:
    aid name
    1  aa
    2  bbtb
    id aid 
    1  1
    2  1
    3  2tb的aid引用的ta的aid
    那么对ta进行delete时,因为aid被tb引用的嘛,1,2这两个aid值被tb引用,当然不能删除了。
    如果先delete tb,那么没有什么东西去引用ta的的aid时,当然可以删除了。你导入也是一个道理。
    如果先导入tb, 会进行约束检查,查找aid被引用的源,由于ta没有被导入,找不到,当然约束检查通不过。