2013-02-18 139 views
0

我需要SQL Server语法的帮助来创建一些trigly,我已经在SQLite上成功地使用了,但是我在NEW.Table上遇到了问题,一旦它不是SQL Server。SQLite触发到SQL Server Express 2008

That's我的SQLite触发代码:

UPDATE EngineeringItems set ElevacaoFIT = CAST(round((select "Position Z" - MatchingPipeOD/2 from EngineeringItems where PnPId = new.PNPID), 0) as INT) where PNPID = new.PNPID; 

PNPID是表PK!

编辑2:

再次感谢老兄! 我已经尝试了一些修改,并且SQL Server接受了它,并且触发器已成功创建。因此,代码为:

CREATE TRIGGER [ElevacaoFIT_Insert] 
    ON [dbo].[EngineeringItems] 
    AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    UPDATE EngineeringItems 
SET 
    ElevacaoFIT = CAST(ROUND((select EngineeringItems."Position Z" - (EngineeringItems.MatchingPipeOD/2) 
FROM 
    EngineeringItems INNER JOIN inserted ON EngineeringItems.PnPId = inserted.PnPId), 0) AS INT); 
END 

但现在我得到这个消息:子查询返回多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。!任何想法?

对不起,打扰你...再次感谢!

回答

1

你可以发布你在SQL Server上试过的东西吗?

像下面这样可以做到这一点:

CREATE TRIGGER [dbo].[EngineeringItems_Trigger] 
    ON [dbo].[EngineeringItems] 
    AFTER INSERT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    UPDATE EngineeringItems 
    SET 
    ElevacaoFIT = CAST(round(("Position Z" - MatchingPipeOD/2), 0) as INT) 
    FROM 
    EngineeringItems INNER JOIN inserted ON EngineeringItems.PnPId = inserted.PNPID; 
END 
+0

请,看看原来的职位与编辑答案!谢谢... – user2083234 2013-02-18 14:13:19

+0

请检查修改我的答案。我相信这应该起作用。 – youcantseeme 2013-02-18 14:22:17

+0

兄弟...请看看编辑2.谢谢! – user2083234 2013-02-18 18:48:44