USE Store
IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'Contract_Detail' AND type = 'TR')
   DROP TRIGGER Contract_Detail
GO
CREATE TRIGGER Contract_Detail
ON ContractInfo
FOR INSERT
ASDECLARE @Cid char(10),
@Pid char(10),
@Clid char(10),
@Cprice money,
@Csum int,
@Cfinish datetime,
@Cstate varchar(6)
BEGIN
SELECT  @Cid=[ContractId],@Pid=PsT.ProductId,@Clid=[ClientId],@Csum=[ContractSum], @Cstate=[ContractState],@Cfinish=[ContractFinish] FROM  inserted as IsT ,ProductInfo as PsT
where IsT.ProductId=PsT.ProductId
if(@Cstate='完成')
INSERT INTO [Store].[dbo].[DetailInfo]([ContractId], [ProductId], [ClientId], [ProductPrice], [ProductSum], [ContractFinish])
VALUES(@Cid,@Pid,@Clid,@Cprice,@Csum,@Cfinish)
end
//上面是不能插入表[DetailInfo]内的代码,奇怪的是若把where IsT.ProductId=PsT.ProductId 去掉则可以
//为什么,希望指点,头大了,谢谢~~~~~~~~

解决方案 »

  1.   

    SELECT     @Cid=[ContractId],@Pid=PsT.ProductId,@Clid=[ClientId],@Csum=[ContractSum],   @Cstate=[ContractState],@Cfinish=[ContractFinish] 
    --------这一段列名指定表别名
      

  2.   

    CREATE   TRIGGER   Contract_Detail 
    ON   ContractInfo 
    FOR   INSERT 
    AS DECLARE   @Cid   char(10), 
    @Pid   char(10), 
    @Clid   char(10), 
    @Cprice   money, 
    @Csum   int, 
    @Cfinish   datetime, 
    @Cstate   varchar(6) 
    BEGIN INSERT   INTO   [Store].[dbo].[DetailInfo]([ContractId],   [ProductId],   [ClientId],   [ProductPrice],   [ProductSum],   [ContractFinish]) 
    SELECT     @Cid=[ContractId],@Pid=PsT.ProductId,@Clid=[ClientId],@Csum=[ContractSum],   @Cstate=[ContractState],@Cfinish=[ContractFinish]   
    FROM     inserted   
    where [ContractState] = '完成'
    end