存在约束,可能删除主表数据,造成从表数据缺少约束。
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1744764&SiteID=1

解决方案 »

  1.   

    帮你顶顶,
    CREATE trigger [AddMsg] ON [NewTrackPoint]
    FOR INSERT
    as
    delete  NewTrackPoint where CarPhone=(select CarPhone from inserted)
    insert into  NewTrackPoint (PointID,CarPhone,CarMark,PointLong,PointLat,Speed,Direction,State,Addr,ReTime,BeiZhu)
    select PointID,CarPhone,CarMark,PointLong,PointLat,Speed,Direction,State,Addr,ReTime,BeiZhu from inserted
    goLZ 对触发期平时用的比较少,但我看似乎没什么问题
      

  2.   

    CREATE trigger [AddMsg] ON [dbo].[TrackPoint]
    FOR INSERT
    as
    delete dbo.NewTrackPoint where CarPhone=(select CarPhone from inserted)
    insert into dbo.NewTrackPoint   (PointID,CarPhone,CarMark,PointLong,PointLat,Speed,Direction,State,Addr,ReTime,BeiZhu) 
    select PointID,CarPhone,CarMark,PointLong,PointLat,Speed,Direction,State,Addr,ReTime,BeiZhu  from inserted
    go---------------------
    语法没错,应该如一楼所说,存在某中约束,不让你操作.
      

  3.   

    /*
    创建表的时候,把中文排序规则 COLLATE Chinese_PRC_CI_AS 去掉,让英文SQL使用默认的英文排序规则,肯定没问题了:
    */CREATE TABLE [dbo].[NewTrackPoint] (
    [PointID] [int] NOT NULL ,
    [CarPhone] [varchar] (15) NULL ,
    [CarMark] [varchar] (20) NULL ,
    [PointLong] [float] NULL ,
    [PointLat] [float] NULL ,
    [Speed] [float] NULL ,
    [Direction] [float] NULL ,
    [State] [varchar] (300) NULL ,
    [Addr] [varchar] (400) NULL ,
    [ReTime] [datetime] NULL ,
    [BeiZhu] [char] (150) NULL
    ) ON [PRIMARY]
    GOCREATE trigger [AddMsg] ON [dbo].[TrackPoint]
    FOR INSERT
    as
    delete dbo.NewTrackPoint where CarPhone=(select CarPhone from inserted)
    insert into dbo.NewTrackPoint (PointID,CarPhone,CarMark,PointLong,PointLat,Speed,Direction,State,Addr,ReTime,BeiZhu)
    select PointID,CarPhone,CarMark,PointLong,PointLat,Speed,Direction,State,Addr,ReTime,BeiZhu from inserted
    go
      

  4.   

    --如果表一定要使用中文排序,只有修改触发器:/*
    delete dbo.NewTrackPoint where CarPhone=(select CarPhone from inserted)
    */
    delete dbo.NewTrackPoint where CarPhone=(select CarPhone COLLATE Chinese_PRC_CI_AS from inserted)
    --显式指定 INSERTED.CarPhone 也使用中文排序:COLLATE Chinese_PRC_CI_AS
      

  5.   

    为何会产生排序规则冲突的问题,不好说,不外乎两种:第一种:TrackPoint.CarPhone 的排序规则不是 COLLATE Chinese_PRC_CI_AS,那就很好解释了,INSERTED 和 DELETED 的排序规则是使用 TrackPoint 表的排序规则,TrackPoint 表与 NewTrackPoint 的排序规则不同,所以产生冲突。第二种:TrackPoint.CarPhone 的排序规则是 COLLATE Chinese_PRC_CI_AS,那就不好解释了,可能 INSERTED 和 DELETED 的排序规则是数据库默认的排序规则(英文),与中文排序规则冲突。所以还恳请楼主公布一下 TrackPoint.CarPhone 的排序规则,以确定 INSERTED 和 DELETED 是使用触发器宿主表的排序规则,还是使用数据库的默认排序规则,谢谢!
      

  6.   

    通过上述分析,我不敢包:/*
    创建表的时候,把中文排序规则 COLLATE Chinese_PRC_CI_AS 去掉,让英文SQL使用默认的英文排序规则,肯定没问题了:
    */显式指定 INSERTED.CarPhone 也使用中文排序:COLLATE Chinese_PRC_CI_AS才是正道。抱歉抱歉!看来信口开河是不行的:)