改成这样试一下,我怀疑你插入的顺序错了:CREATE TRIGGER [MakePrice] ON [dbo].[Cpinfo] 
FOR Insert 
AS
declare @N varchar (9),
            @D varchar(5)
select @N=cPriceTable,@D=bFlag from Inserted
if @D='1'  
exec ('insert ' + @N+' (cG_Code,cG_Name,mG_price) Select cG_Code,cG_Name,case when (mG_uprice<>0) then 0 else mG_uprice end as mG_price From Gpinfo')
go
好象还是有问题,你每次都把Gpinfo表倒到你cPriceTable字段指定的表,有主键肯定会重复!
你还是写明白你要做的功能吧!

解决方案 »

  1.   

    不会是主建重复,因为GPINFO里的cG_Code是主键我现的问题是,我在程序中一添加记录就说插入了重复的值,但是所有的操作都成功的完成了,我在SQL里直接新增记录就什么问题都没有!
    我要实现的就是当向cuinfo里增一条记录时如果BFLAG为真就把GPINFO INSERT到一个新表,表名是cPrcieTable,cpricetable自动生成的(=price+cG_Code)
      

  2.   

    海阔天空兄的的语句我觉得有问题,@N表不存在你怎么INSERT进去?
    当INSERTED表的记录有多条时,这个触发器一定是错误的!
      

  3.   

    to: rwq_(风云浪子) 
    谢谢你!
    我原以为他有表!
    好多人写不能处理多条的触发器,习以为常了!呵呵他现在的问题,我已经不知道问题在哪里了,等高手来解决吧!
      

  4.   

    什么啊,没有@N表怎么不能INSERT进去,我用的是SELECT INTO啊,我说的很明确在SQL里执行没任何问题,在程序里才有问题
      

  5.   

    我测试了一下,vbFly(菜得不行了) 你的办法是可行的办法,没有你的具体的数据,我也无能为力了!
      

  6.   

    看来是客户端问题了!
    你可以把触发器DROP掉试试程序,看还有没有错误,如果没有了,试试把触发器改成:CREATE TRIGGER [MakePrice] ON [dbo].[Cpinfo] 
    FOR Insert 
    AS
    set nocount on
    declare @N varchar (9),
                @D varchar(5)
    select @N=cPriceTable,@D=bFlag from Inserted
    if @D='1'  
    exec ('set nocount on Select cG_Code as cG_Code,cG_Name as cG_Name,case when(mG_uprice<>0) then 0 else mG_uprice end as mG_price into ' + @N+' From Gpinfo')go
      

  7.   

    set nocount on是什么意思,问题好象解决了,请给我解释一下好吗?
      

  8.   

    呵呵,撞上的,你是用DELPHI的吧,有些控件会取影响的行数的信息,拷贝一段ONLINE BOOK看看:
    SET NOCOUNT
    使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。语法
    SET NOCOUNT { ON | OFF }注释
    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft&reg; SQL Server&#8482; 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。